顺序查找-判断质数/记录出现次数
描述
笨小猴的詞匯量很小,所以每次做英語選擇題的時(shí)候都很頭疼。但是他找到了一種方法,經(jīng)試驗(yàn)證明,用這種方法去選擇選項(xiàng)的時(shí)候選對(duì)的幾率非常大!
這種方法的具體描述如下:假設(shè)maxn是單詞中出現(xiàn)次數(shù)最多的字母的出現(xiàn)次數(shù),minn是單詞中出現(xiàn)次數(shù)最少的字母的出現(xiàn)次數(shù),如果maxn-minn是一個(gè)質(zhì)數(shù),那么笨小猴就認(rèn)為這是個(gè)Lucky Word,這樣的單詞很可能就是正確的答案。
輸入
只有一行,是一個(gè)單詞,其中只可能出現(xiàn)小寫字母,并且長度小于100。
輸出
共兩行,第一行是一個(gè)字符串,假設(shè)輸入的的單詞是Lucky Word,那么輸出“Lucky Word”,否則輸出“No Answer”;
第二行是一個(gè)整數(shù),如果輸入單詞是Lucky Word,輸出maxn-minn的值,否則輸出0。
知識(shí)1:判斷質(zhì)數(shù)改寫while:
int prime(int x) //判斷質(zhì)數(shù);1是質(zhì)數(shù) 0不是質(zhì)數(shù){int j=2;if(x<2) return 0;while (j<int(sqrt(float(x)))) {if(x%j==0)return 0;j++;}return 1;}知識(shí)2:判斷字符出現(xiàn)個(gè)數(shù)
string s; int t[26]; cin>>s; n=s.size(); for (int i=0;i<n;i++)t[s[i]-'a']++;知識(shí)點(diǎn)3:memset初始化
#include<stdio.h> #include<string.h>int main(){char str[] = "beautiful earth";memset(str, '*', 6);printf("%s", str); }Output: ******ful earth上述代碼把 str 的前六個(gè)字節(jié)用 * 填滿,那么能不能用下面的方法把 arr 的前六個(gè)數(shù)字初始化成 1 呢?
int arr[15]; memset(arr, 1, 6); //錯(cuò)誤代碼答:不可。
memset()?的用法是:
#include <string.h> void *memset(void *s, int c, size_t n); //語法?memset()?函數(shù)把 s 指向的一塊內(nèi)存中每個(gè)字節(jié)的值設(shè)置為 c,內(nèi)存的大小是 n 個(gè)?bytes
強(qiáng)調(diào),第三個(gè)參數(shù) n 決定了開辟的內(nèi)存有多少個(gè)字節(jié)。
一個(gè) char 占一個(gè) byte,一個(gè) int 占 4 個(gè)bytes。所以在上面的案例中, char 數(shù)組的初始化, 第三個(gè)參數(shù)填 6 就能初始化 6 個(gè);如果要初始化一個(gè) int 數(shù)組,實(shí)現(xiàn)前 6 個(gè)元素是 1 ,第三個(gè)參數(shù)不能是 6。
那么,這樣寫是正確的嗎?
int arr[15]; memset(arr, 1, sizeof(int) * 6); // 錯(cuò)誤示范我們嘗試跑一下 :
?16843009 這個(gè)數(shù)字是怎么來的?不要忘記,memset() 中,是按 byte 賦值的,那么把 4 個(gè) byte 賦值為 1, int 值并不是 1,而是:
所以,不能用 memset() 初始化數(shù)組為 1 。但是可以將數(shù)組高效地初始化為 0 或 -1(只能是0 或 -1。原理:補(bǔ)碼表示法, -1 的補(bǔ)碼為: 0xFFFFFFFF,在內(nèi)存上是連續(xù)的, -2 就不行,-2 是 0xFFFFFFFE)?
總結(jié)
以上是生活随笔為你收集整理的顺序查找-判断质数/记录出现次数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TensorFlow4-常量和变量及Te
- 下一篇: python列表对应元素合并为列表及判断