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


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

  评论区

1.可以先排序字符,之后在找和最大数量相同的字符串,找到就直接输出更简单。因为不用把符合条件的赋值到另一个数组,再进行字符排序排序。
2023-02-22 19:46:59
  • «
  • 1
  • »