Advertisement

XTU OJ 1395

阅读量:

字符频度

题目描述

一个仅包含小写字母的字符串中各字符出现频率分别为Ca,Cb,…,Cz(其中Ca表示'a'出现的次数)。请确定这些频率中的最大值及其对应的字符。例如,在字符串abcdd中各字符'a'、'b'、'c'均出现1次而'd'出现了2次因此1是最大的频率值;如果有多个字符具有相同的最大频率值则应选择字母序号较小的那个作为结果如字符串aaabbccddd中a出现了3次b出现了2次c出现了2次d出现了3次则3是最大的频率值但由于a是最小的字母因此结果应为"3 a d"

输入

存在不超过1000组样例,每个样例为一个字符串,长度不超过1000。

输出

每个案例都需要一行呈现结果,请注意以下几点:

  1. 首先是一个整数,请确保其正确性。
  2. 紧接着是按字母顺序依次列出各个字符。
  3. 每个字符之间应留有适当空格以保证清晰度

样例输入

复制代码

样例输出

复制代码

这一题吧关键是要理解题目的意思,就感觉题目太绕了,把我都绕晕了。

复制代码
 #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;
    
 }

全部评论 (0)

还没有任何评论哟~