JSK-134 求出現次數最多的字元【入門】
阿新 • • 發佈:2018-12-10
一個字串中可能包含a~z中多個字串,並且可能會有重複,如 String data ="abcdaaa",這道字串出現次數醉倒的字母就是a,出現了4次。現在使用者輸入一個字串,我們需要求出出現次數最多的字母,並且求出次數,如果 存在字母中出現最多的次數不唯一,但所有出現次數最多的字母及次數都要打印出來。
輸入:輸入是一行字串,就是我們所需統計的字串,例如我們輸入 “abcabd”
輸出:輸出是出現次數最多的字母以及出現次數,二者用空格分開,如果出現最多次數的字母不唯一,按照字母在字串中出現的順序,把所有結果打印出來,用換行符將每一行的字母和次數分開
樣例輸入
abcabd
樣例輸出
a 2 b 2
問題描述:(略)
問題分析:
這個題需要先統計各個字元數量,然後找出字元出現最多的次數,再根據次數輸出所有出現次數最多的字元。
程式說明:
用C語言編寫程式時,陣列s[]的長度是個問題,原問題描述中沒有指出輸入最多多少字元,令人困惑。這就需要稍微長一點。如果用C++編寫程式,使用string類宣告字串變數就簡單了。
程式中的第27行用來保證程式邏輯的嚴密性,如果輸入的字元是空串,應該是什麼也不用輸出。
參考連結:(略)
題記:
字元也是可以用來計算的,字元也是整數。
統計與查詢是程式中永恆的話題。
AC的C語言程式如下:
/* JSK-134 求出現次數最多的字元 */ #include <stdio.h> #include <string.h> #define N 256 #define A 26 char s[N]; int cnt[A]; int main(void) { // 讀入字串 scanf("%s", s); // 統計字串中字母數量 int i; memset(cnt, 0, sizeof(cnt)); for(i = 0; s[i]; i++) cnt[s[i] - 'a']++; // 找出數量最多的字母 int maxc = 0; for(i = 0; i < A; i++) maxc = cnt[i] > maxc ? cnt[i] : maxc; // 輸出結果 if(maxc > 0) { for(i = 0; i < A; i++) if(cnt[i] == maxc) printf("%c %d\n", 'a' + i, cnt[i]); } return 0; }