qq_32653757 2015-11-18 06:45 采纳率: 76.9%
浏览 2798
已采纳

新手OJ, 找出字符串中出现最多的字母,本机运行正确, 但是wrong answer, 求大神指点

Description

钟Sir是一个迷信的(superstitious)家伙。他相信每一个字符串(string)里都有一个幸运字符。我们可以通过以下方法找到这个字符。例如,在字符串abbccc中,c 出现的次数最多,所以这个幸运字符就是 c 啦!(>_<)  (钟Sir的想法好简单啊…)

Input

第一行是测试数据的组数n,接下来的每组测试数据占一行,每行数据不超过1000个字符且非空。

字符串里只含小写字母。

Output

每组数据对应输出一行,包括出现次数最多的字符和该字符出现的次数,中间是一个空格。如果有多个字符出现的次数相同且最多,那么输出ASCII码最小的那一个字符。

Sample Input

2
abbccc
adfadffasdf

Sample Output

c 3
f 4
=====t===t

#include
#include
int main(void){
int n, g, i, z[28], max, xia;
char c[1050], ch;
scanf("%d", &n);
ch=getchar();
for(g=1; g<=n; g++){

for(i=0; i<=27; i++)
z[i]=0;

i=0;
while((c[i]=getchar())!=0&&c[i]!='\n')
i++;

for(i=0; i<strlen(c); i++)
switch(c[i]){
case 'a': z[0]++; break;
case 'b': z[1]++; break;
case 'c': z[2]++; break;
case 'd': z[3]++; break;
case 'e': z[4]++; break;
case 'f': z[5]++; break;
case 'g': z[6]++; break;
case 'h': z[7]++; break;
case 'i': z[8]++; break;
case 'j': z[9]++; break;
case 'k': z[10]++; break;
case 'l': z[11]++; break;
case 'm': z[12]++; break;
case 'n': z[13]++; break;
case 'o': z[14]++; break;
case 'p': z[15]++; break;
case 'q': z[16]++; break;
case 'r': z[17]++; break;
case 's': z[18]++; break;
case 't': z[19]++; break;
case 'u': z[20]++; break;
case 'v': z[21]++; break;
case 'w': z[22]++; break;
case 'x': z[23]++; break;
case 'y': z[24]++; break;
case 'z': z[25]++; break;
}

max=z[0]; xia=0;
for(i=1; i<=25; i++)
if(z[i]>max){
max=z[i];
xia=i;
}

ch='a'+xia;
if(c[0]=='\n')
printf("");
else
printf("%c %d\n", ch, max);
}
return 0;
}

复制可运行。

  • 写回答

1条回答 默认 最新

  • ysuwood 2015-11-18 08:18
    关注
     #include <string.h>
    #include"stdio.h"
    int main(void)
    {
        int n,i, z[26], max, xia;
        char c[1050], ch;
    
        scanf("%d",&n);
        while(n>0)
        {
            n--;
            scanf("%s", c);
    
            for(i=0; i<26; i++)
                z[i]=0;
            xia=strlen(c);
    
            for(i=0; i<xia; i++)
                z[c[i]-'a']++;
    
            max=z[0]; xia=0;
            for(i=1; i<=25; i++)
            if(z[i]>max){ 
                max=z[i];
                xia=i;
            }
    
            ch='a'+xia;
            printf("%c %d\n", ch, max);
        }
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥66 如何制作支付宝扫码跳转到发红包界面
  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题
  • ¥15 有没有人能解决下这个问题吗,本人不会编程
  • ¥15 plotBAPC画图出错
  • ¥30 关于#opencv#的问题:使用大疆无人机拍摄水稻田间图像,拼接成tif图片,用什么方法可以识别并框选出水稻作物行
  • ¥15 Python卡尔曼滤波融合
  • ¥20 iOS绕地区网络检测