問題描述 :
密碼分析學中常常需要統計字元出現的頻度。給定若干行短文,要求按字元出現的頻度由高到低輸出,當兩個字元出現的頻度相同時,按字元大小的順序輸出。
注意:只需要統計英文本母的頻度,非英文本母一律忽略。
輸入說明 :
輸入由多組資料組成。每組資料由一行長度不超過100的字串組成,不區分字母大小寫,如a與a看作同乙個字母。
輸出說明 :
對每組輸入資料都有若干行輸出,每行有兩個輸出資料,第乙個資料為某個大寫字母,第二個資料為該字母出現的頻度,兩個資料之間有乙個空格。輸出順序按字母出現的頻度由高到低輸出,當兩個字母的頻度相同時,按字母大小的順序輸出。兩組輸出之間有一行空行。
輸入範例 :
do what you say, say what you do.
this is a test.
count me 1 2 3 4 5.
輸出範例:
a 4o 4
y 4d 2
h 2s 2
t 2u 2
w 2s 3
t 3i 2
a 1e 1
h 1c 1
e 1m 1
n 1o 1
t 1u 1
總結
1.這個題和基礎題64統計子母有點類似,有些不同就是需要按照頻度輸出。其實不用結構體也能做出來,只要在64的基礎上進行個排序就可以,既然出現在結構體這裡,倒不如構造個。我的思路基本上很清楚:
用字元陣列儲存字串---->進行是否為子母的判斷----->如果為子母統一化成大寫子母----->用結構陣列儲存字串中字元出現的頻度(初始頻度均為0,每次出現乙個字元充分利用字元與數字之間的關係進行頻度的統計)---->按照頻度進行排序----->輸出頻度大於0的即可
2.這裡充分利用了一些函式,isalpha(),islower(),strlen();
3.加油!!
#include
#include
#include
typedef
struct countcount;
intmain()
//進行判斷是否為子母並計算每個字元出現的頻度
for(i=
0;i//按照頻度進行排序從大到小
for(i=
1;i<
26;i++)}
//輸出頻度大於0的即可
for(i=
0;i<
26;i++)}
printf
("\n");
}return0;
}
東華oj 基礎題第32題
32 完數個數 問題描述 完數的定義 如果乙個大於1的正整數的所有真因子 不包括自己的那些因子 之和等於它的本身,則稱這個數是完數,比如6,28都是完數 6 1 2 3 28 1 2 4 7 14。本題的任務是判斷兩個正整數之間完數的個數。輸入說明 第一行是乙個正整數n,表示測試例項的個數,然後就是...
東華oj 基礎題第40題
40 分拆素數和 問題描述 把乙個偶數拆成兩個不同素數的和,有幾種拆法呢?說明 比如10,可以拆成3 7和5 5以及7 3,但是3 7與7 3相同,只算一種,5 5由於兩個素數相同,不計算在內。因此,10的拆法只有一種。輸入說明 首先輸入乙個t 不超過500 然後輸入t個正的偶數,其值不會超過100...
東華oj 基礎題第89題
89 字串壓縮 問題描述 通過鍵盤輸入字母 a z a z 組成的字串,字串長度不超過1000。首先將所有字母統一成小寫字母,然後將字串中連續出現的重複字母進行壓縮,並輸出壓縮後的字串。壓縮規則 1 僅壓縮連續重複出現的字元。比如字串 abcbc 由於無連續重複字元,壓縮後的字串還是 abcbc 2...