题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1004
思路
建立两个数组,一个char的二维数组,一个int数组,分别负责,二维数组负责记录单词是什么,而int数组负责记录单词出现的次数。然后最后通过for循环遍历,得出int数组里面最大的那个值的下标,然后在通过下标直接输出char数组的单词。
AC代码
#include<stdio.h>
#include<string.h>
int main(){
int n;
char temp[18];
int flag;//检测循环之前是否找到了相同颜色单词
int maxIndex;//最大出现次数的下标
while(1){
maxIndex = 0;
int num[1005]={0};//用于存储单词出现的次数
char color[1005][18]={};//用于存储出现的单词
scanf("%d",&n);
getchar();
if(n == 0){
break;
}
for(int i = 0;i < n;i++){
if(i == 0){//第一个输入的时候
scanf("%s",&color[0]);
// printf("color:%s",color[0]);
getchar();
num[0]++;
}
else{//后面单词的情况
scanf("%s",&temp);
getchar();
flag = 0;
for(int j = 0;j < i-1;j++){//遍历在这之前看是否有相同的字符串
if(strcmp(color[j],temp)==0){
num[j]++;
flag = 1;
break;
}
}
if(flag == 0){
strcpy(color[i],temp);
num[i]++;
}
}
}
// printf("num[0]值:%dcolor:%s\n",num[0],color[0]);
for(int k = 1;k < n;k++){
// printf("k:%dnum[k]值:%dcolor:%s\n",k,num[k],color[k]);
if(num[k]>num[maxIndex]){
maxIndex = k;
}
}
printf("%s\n",color[maxIndex]);
}
return 0;
}