解题思路: 统计每个字符串所出现的次数,随后在这些出现的次数里面找到一个最大值用来作出现次数最多的字符串的一个标准,然后把满足这个标准的字符串给存到数组里,最后排序一下,输出即可。
注意事项: 不要想啥颜色单词还是啥颜色词组的,本质就是找n个字符串里面出现次数最多的那个字符串,且有多个字符串的话,则按字典序进行输出即可。
参考代码:
#include <stdio.h> #include <string.h> int main(){ char ans[1000][100],s[1000][100]; int book[1000][2] = {0}; int i,j,k = 0,n,count,max = 0; scanf("%d\n", &n); for(i = 0; i < n; i++){ gets(s[i]); //使用gets读入是因为读入的时候有可能出现词组的情况 } for(i = 0; i < n; i++){ //统计每个单词或词组所出现的次数 count = 0; if(strlen(s[i]) > 0){ book[i][0] = i+1; //标记当前位置上是存在单词或词组的 for(j = 0; j < n; j++){ if(strcmp(s[i],s[j]) == 0){ if(j != i){ s[j][0] = '\0'; //防止重复判断 } count++; } } book[i][1] = count; //存储当前单词或词组的出现次数 } } for(i = 0; i < n; i++){ //找单词或词组的最多的出现次数,后续会把max作为标准值来判符合条件的单词或词组 if(book[i][0] > 0){ if(max < book[i][1]){ max = book[i][1]; } } } for(i = 0; i < n; i++){ //把符合条件(出现次数最多)的单词或词组给找到,然后存到ans数组里用于最后的输出 if(book[i][1] == max){ strcpy(ans[k],s[i]); k++; } } for(i = 0; i < k; i++){ //排序 for(j = 0; j < k-i-1; j++){ if(strcmp(ans[j],ans[j+1]) > 0){ char temp[100]; strcpy(temp,ans[j]); strcpy(ans[j],ans[j+1]); strcpy(ans[j+1],temp); } } } for(i = 0; i < k; i++){ //输出结果 printf("%s\n", ans[i]); } return 0; }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:635 |
化学品问题 (C语言代码)浏览:1394 |
三进制小数 (C++代码)(第11位大于1.5才能进位)浏览:1203 |
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:674 |
【密码】 (C语言代码)浏览:350 |
简单的a+b (C++语言代码)浏览:895 |
Pascal三角 (C语言代码)格式错误浏览:551 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:693 |
输出正反三角形 (C语言代码)格式错误!!!浏览:1177 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:1267 |