NYOJ 241 字母统计(好心酸的水题)

来源:互联网 发布:java图形化设计 编辑:程序博客网 时间:2024/06/04 19:19

字母统计

时间限制:3000 ms  |  内存限制:65535 KB
难度:1
描述
现在给你一个由小写字母组成字符串,要你找出字符串中出现次数最多的字母,如果出现次数最多字母有多个那么输出最小的那个。
输入
第一行输入一个正整数T(0<T<25)
随后T行输入一个字符串s,s长度小于1010。
输出
每组数据输出占一行,输出出现次数最多的字符;
样例输入
3abcdbbaajsdhfjkshdfjksahdfjkhsajkf
样例输出
aaj


调试了十几遍,弄了一个多小时,才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;}        



0 0
原创粉丝点击