?字符频度
题目描述
一个只含小写英文字母的字符串,各个字符出现的次数为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
这一题吧关键是要理解题目的意思,就感觉题目太绕了,把我都绕晕了。
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,k;
char str[1005];
while(scanf("%s",str)!=EOF)
{
getchar();
int cnt[30]={0},ans[1005]={0};
for(i=0;i<strlen(str);i++)//记录字母出现的次数
{
cnt[str[i]-'a']++;
}
for( j=0 ; j<26 ; j++)//记录不同次数的个数
{
if(cnt[j]!=0)
ans[cnt[j]]++;
}
int max=ans[0]; //最多出现的次数
for( j=1 ; j<1005 ; j++)
{
if(ans[j]>max)
{
max=ans[j];
}
}
for(k=0;k<1005;k++)// k代表出现次数的个数
{
if(ans[k]==max)
{
printf("%d",k);
for(i=0;i<26;i++)
{
if(cnt[i]==k)
{
printf(" %c",i+97);
}
}
break;
}
}
printf("\n");
}
return 0;
}
|