1. 程式人生 > >JSK-134 求出現次數最多的字元【入門】

JSK-134 求出現次數最多的字元【入門】

一個字串中可能包含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;
}