日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

顺序查找-判断质数/记录出现次数

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 顺序查找-判断质数/记录出现次数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

描述

笨小猴的詞匯量很小,所以每次做英語選擇題的時候都很頭疼。但是他找到了一種方法,經試驗證明,用這種方法去選擇選項的時候選對的幾率非常大!

這種方法的具體描述如下:假設maxn是單詞中出現次數最多的字母的出現次數,minn是單詞中出現次數最少的字母的出現次數,如果maxn-minn是一個質數,那么笨小猴就認為這是個Lucky Word,這樣的單詞很可能就是正確的答案。

輸入

只有一行,是一個單詞,其中只可能出現小寫字母,并且長度小于100。

輸出

共兩行,第一行是一個字符串,假設輸入的的單詞是Lucky Word,那么輸出“Lucky Word”,否則輸出“No Answer”;
第二行是一個整數,如果輸入單詞是Lucky Word,輸出maxn-minn的值,否則輸出0。

#include<cmath>//要用到其中求開方的函數sqrt() #include<iostream> #include<cstring>//要用到其中求字符串長度的函數size() using namespace std; bool prime(int n) {if(n<2) return false;else{for (int i=2;i<int(sqrt(float(n)));i++)if(n%i==0) return false;}return true; } //判斷質數 int main() {int a[26],maxn=0,minn=1000;string s;int i;cin>>s;memset(a,0,sizeof(a));for (i=0;i<s.length();i++)a[s[i]-'a']+=1;for(i=0;i<26;i++){if(maxn<a[i])maxn=a[i];if(minn>a[i]&&a[i]!=0)minn=a[i];}if(prime(maxn-minn)==true)cout<<"Lucky Word"<<endl<<(maxn-minn)<<endl;elsecout<<"No Answer"<<endl<<0<<endl;system("pause");return 0; }

知識1:判斷質數改寫while:

int prime(int x) //判斷質數;1是質數 0不是質數{int j=2;if(x<2) return 0;while (j<int(sqrt(float(x)))) {if(x%j==0)return 0;j++;}return 1;}

知識2:判斷字符出現個數

string s; int t[26]; cin>>s; n=s.size(); for (int i=0;i<n;i++)t[s[i]-'a']++;

知識點3:memset初始化

#include<stdio.h> #include<string.h>int main(){char str[] = "beautiful earth";memset(str, '*', 6);printf("%s", str); }Output: ******ful earth

上述代碼把 str 的前六個字節用 * 填滿,那么能不能用下面的方法把 arr 的前六個數字初始化成 1 呢?

int arr[15]; memset(arr, 1, 6); //錯誤代碼

答:不可。

memset()?的用法是:

#include <string.h> void *memset(void *s, int c, size_t n); //語法

?memset()?函數把 s 指向的一塊內存中每個字節的值設置為 c,內存的大小是 n 個?bytes

強調,第三個參數 n 決定了開辟的內存有多少個字節。

一個 char 占一個 byte,一個 int 占 4 個bytes。所以在上面的案例中, char 數組的初始化, 第三個參數填 6 就能初始化 6 個;如果要初始化一個 int 數組,實現前 6 個元素是 1 ,第三個參數不能是 6。

那么,這樣寫是正確的嗎?

int arr[15]; memset(arr, 1, sizeof(int) * 6); // 錯誤示范

我們嘗試跑一下 :

?16843009 這個數字是怎么來的?不要忘記,memset() 中,是按 byte 賦值的,那么把 4 個 byte 賦值為 1, int 值并不是 1,而是:

所以,不能用 memset() 初始化數組為 1 。但是可以將數組高效地初始化為 0 或 -1(只能是0 或 -1。原理:補碼表示法, -1 的補碼為: 0xFFFFFFFF,在內存上是連續的, -2 就不行,-2 是 0xFFFFFFFE)?

總結

以上是生活随笔為你收集整理的顺序查找-判断质数/记录出现次数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。