字母统计
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
1
-
描述
-
现在给你一个由小写字母组成字符串,要你找出字符串中出现次数最多的字母,如果出现次数最多字母有多个那么输出最小的那个。
-
输入
-
第一行输入一个正整数T(0<T<25)
随后T行输入一个字符串s,s长度小于1010。
输出
- 每组数据输出占一行,输出出现次数最多的字符; 样例输入
-
3 abcd bbaa jsdhfjkshdfjksahdfjkhsajkf
样例输出
-
a a j
调试了十几遍,弄了一个多小时,才AC,难度为1,的题,我也是给跪了,解题比较愚蠢还用了结构体
代码如下:
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> using namespace std; struct word { char c; int n; }num[1100]; int cmp(word a,word b) { return a.n>b.n; } int main() { int t,i,j,len,sign[1100]; char str[1100]; scanf("%d",&t); while(t--) { memset(sign,0,sizeof(sign)); scanf("%s",str); len=strlen(str); int k=0; for(i=0;i<len;i++) { num[k].c=str[i]; num[k].n=1; for(j=i+1;j<len;j++) { if(sign[i]==1) break; if(sign[i]==0) { if(str[i]==str[j]) { num[k].n++; sign[j]=1; } } } k++; } sort(num,num+k,cmp); if(num[0].n!=num[1].n) printf("%c\n",num[0].c); else { char s=num[0].c; for(i=1;num[i].n==num[0].n;i++) { if(num[i].c<s) s=num[i].c; } printf("%c\n",s); } } return 0; }
看了最优程序,简洁,思路清晰,今天我终于知道什么叫智商压制了
#include<stdio.h> #include<string.h> main() { int x,i,max,q; char a[1011]; scanf("%d",&x); getchar(); while(x--) { int s[26]={0}; gets(a); for(i=strlen(a)-1;i>=0;i--) s[a[i]-97]++; max=0; for(i=0;i<26;i++) if(max<s[i]) max=s[i],q=i; printf("%c\n",q+97); } return 0; }
-
第一行输入一个正整数T(0<T<25)