解题思路:
每种颜色都对应有其票数,可定义颜色结构:包含数据成员颜色单词(词组)和获得的投票数;色盲的人数不多于1000个,每人一句话,最多有1000种不同的颜色,组成可查询的颜色表;输入n后可以读取随后的n句话,每句话包含颜色单词(词组)、换行符和结束符,最长不超过22个字符,删掉换行符后,单词(词组)可用来查颜色表,若颜色表中已有该单词(词组),就可以为它投票,并记录最多的票数后,结束查找;若单词(词组)还不在颜色表中,就将其新增到颜色表,并设置票数为一,表长度加一;所有的数据都输入并处理后,得到”最多票数“,再查颜色表,取得票数最多的颜色,组成票数最多颜色表,用快速排序,通过比较颜色单词(词组),排成字典序输出。

注意事项:
颜色单词包含小写字母或者空格,可以是词组,最好用fgets来读取,去掉换行符后,才可以用来查颜色表。

参考代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct SColor{
    char w[21];
    int v;
}Color;
Color color[1000],mcolor[1000];//最多1000种不同的颜色
int main(){
    int y(const void *,const void *);
    char t[22];
    int i,j,l,c,n,mc,mv=1;
    scanf("%d\n",&n);//这里先读取'\n'防止被fgets获取到
    for(c=i=0;i<n;i++){
        fgets(t,22,stdin);//每个字符串后面多了'\n'
        l=strlen(t);
        if(t[l-1]=='\n') t[l-1]='\0';//去掉无关字符
        for(j=0;j<c;j++){//查颜色表
            if(strcmp(t,color[j].w)==0){//匹配颜色单词
                color[j].v++;//为颜色投票
                if(color[j].v>mv) mv=color[j].v;//记录最多票数
                break;//已找到,不再找
            }
        }
        if(j==c){//颜色表中还没有单词t
            strcpy(color[c].w,t);//将单词t加入颜色表
            color[c].v=1;//票数为1
            c++;//颜色表的单词数
        }
    }
    for(mc=i=0;i<c;i++){//查颜色表
        if(color[i].v==mv){//取得票数最多的颜色
            strcpy(mcolor[mc].w,color[i].w);//组成票数最多颜色表
            mc++;//票数最多颜色表的单词数
        }
    }
    qsort(mcolor,mc,sizeof(Color),y);//字典序
    for(i=0;i<mc;i++) puts(mcolor[i].w);
    return 0;
}
int y(const void *a,const void *b){
    Color *ca=(Color *)a;
    Color *cb=(Color *)b;
    return strcmp(ca->w,cb->w);//比较颜色单词,排成字典序
}


点赞(0)
 

0.0分

1 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论