题目描述
一个只含小写英文字母的字符串,各个字符出现的次数为Ca,Cb,…,Cz。求Ci中出现次数最多的数及其字符。比如字符串“abcdd”
,‘a’
,‘b’
,‘c’
都出现1次,‘d’
出现2次,所以1出现次数最多。 如果存在多个相同的最多出现次数,输出字母小的那个次数。比如字符串“aaabbccddd”
,3个‘a’
,2个‘b’
,2个‘c’
,3个‘d’
,3和2都出现2次,这时因为‘a’
最小,输出”3 a d”。
输入
存在不超过1000组样例,每个样例为一个字符串,长度不超过1000。
输出
每个样例输出一行,首先是一个整数,表示最多出现的次数,然后按字典序输出各个字母,每个字母之间用一个空格隔开,行尾无多余空格。
样例输入
abcdd ababab
样例输出
1 a b c 3 a b
AC代码
#include<stdio.h> #include<string.h> int main() { char s[1005]; while(gets(s)!=NULL){ int len=strlen(s); int a[26]={};//字母出现的个数 int b[1005]={};//不同次数的个数 int i,t=0; for(i=0;i<len;i++){ t=s[i]-'a'; a[t]++; } for(i=0;i<26;i++){ if(a[i]!=0){ b[a[i]]++; } } int max=b[0],m; for(i=0;i<1005;i++){ if(b[i]>=max){ max=b[i]; m=i; } } printf("%d",m); for(i=0;i<26;i++){ if(a[i]==m)printf(" %c",i+'a');//巧妙之处:利用数组a } printf("\n"); } }
搞清楚几个数组的关系即可,注意循环的条件