#include
#include
int main()
{
int i, max = 0, m, l;
char c;
int check[26] = {0};
scanf("%d", &m);
for(l = 0; l < m; l++)
{
scanf("%c", &c);
check[c - 'a'] = check[c - 'a'] + 1;
}
for(i = 0; i < 26; i++)
{
if(check[i] > check[max])
{
max = i;
}
}
printf("%c", 'a' + max);
return 0;
}
int check[26] = {0};
这样只会初始化第一个元素为0
应该
for (int i = 0; i < 26; i++) check[i] = 0;
没看出问题,我试了几个运行正确;你输入字符的时候是否输入了空格,不要输入空格或者其它,连续输入字母。
当你第一个
scanf("%d", &m);
后面要加
getchar();
否则:
for(l = 0; l < m; l++)
{
scanf("%c", &c); //c 第一次就会等于10('\n' ascii 值10);
check[c - 'a'] = check[c - 'a'] + 1; //check[10 - 'a'] 后果可能未知的错误
}
#include<stdio.h>
int main()
{
int i, max = 0, m, l;
char c;
int check[26] = {0};
scanf("%d", &m);
getchar();
for(l = 0; l < m; l++)
{
scanf("%c", &c);
check[c - 'a'] = check[c - 'a'] + 1;
}
for(i = 0; i < 26; i++)
{
if(check[i] > check[max])
{
max = i;
}
}
printf("%c", 'a' + max);
return 0;
}
楼上正解,scanf()执行完之后,回车键还在缓冲区的,这样下一次再执行scanf()回车键就被写入到字符中了,应该使用getchar()把缓冲区的回车键剔除才行。