解题思路:
每种颜色都对应有其票数,可定义颜色结构:包含数据成员颜色单词(词组)和获得的投票数;色盲的人数不多于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分
2 人评分
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:530 |
蓝桥杯历届试题-九宫重排 (C++代码)浏览:2812 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:641 |
简单的a+b (C语言代码)浏览:564 |
求圆的面积 (C语言代码)浏览:1366 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:1000 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:485 |
简单的a+b (C语言代码)浏览:661 |
C语言训练-亲密数 (C语言代码)浏览:697 |
最小公倍数 (C语言代码)浏览:1105 |