我的PAT系列文章更新重心已移至Github,歡迎來(lái)看PAT題解的小伙伴請(qǐng)到Github Pages瀏覽最新內(nèi)容。此處文章目前已更新至與Github Pages同步。歡迎star我的repo。
題目
請(qǐng)編寫(xiě)程序,找出一段給定文字中出現(xiàn)最頻繁的那個(gè)英文字母。
輸入格式:
輸入在一行中給出一個(gè)長(zhǎng)度不超過(guò) 1000 的字符串。字符串由 ASCII 碼表中任意可見(jiàn)字符及空格組成,至少包含 1
個(gè)英文字母,以回車(chē)結(jié)束(回車(chē)不算在內(nèi))。
輸出格式:
在一行中輸出出現(xiàn)頻率最高的那個(gè)英文字母及其出現(xiàn)次數(shù),其間以空格分隔。如果有并列,則輸出按字母序最小的那個(gè)字母。統(tǒng)計(jì)時(shí)不區(qū)分大小寫(xiě),輸出小寫(xiě)字母。
輸入樣例:
This is a simple TEST. There ARE numbers and other symbols 1&2&3...........
輸出樣例:
e 7
思路
這道題也是夠簡(jiǎn)單。
開(kāi)一個(gè)int[26]記錄字母出現(xiàn)次數(shù)。
找最大值的時(shí)候從后向前找,找到的就是最大值中字母序最小的。
代碼
最新代碼@github,歡迎交流
#include <stdio.h>
#include <ctype.h>
int main()
{
char c;
int count[26] = {0}, max = 25;
while((c = getchar()) != '\n')
if(isalpha(c))
count[tolower(c) - 'a']++;
/* find forward from end in case there are multiple maximums */
for(int i = 25; i >= 0; i--)
if(count[i] >= count[max])
max = i;
printf("%c %d", max + 'a', count[max]);
return 0;
}