解题思路: 统计每个字符串所出现的次数,随后在这些出现的次数里面找到一个最大值用来作出现次数最多的字符串的一个标准,然后把满足这个标准的字符给存到数组里,最后排序一下,输出即可。


注意事项: 不要想啥颜色单词还是啥颜色词组的,本质就是找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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

坚果 1年前 回复TA
1.可以先排序字符,之后在找和最大数量相同的字符串,找到就直接输出更简单。因为不用把符合条件的赋值到另一个数组,再进行字符排序排序。