这一道题姑且可以叫做“让气球飞”吧。比较简单,AC率算是比较高了,一次性通过。
大概思路是:首先建立一个字符串数组color_table,用与存储不同的颜色,同时创建一个整型数组count用于存储对应颜色数组中此索引颜色出现的次数。每当程序读入一种颜色,就将其与颜色数组中已经存在的颜色进行比较,如果该颜色已经存在,将对应的颜色的出现计数值加1;如果没找到该颜色,则表示这是新的颜色,则需要将此颜色加入到color_table当中,并将颜色总数total加1。完整的程序代码如下:
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 5 #define MAX_N 1000U /* 最多可存储的颜色数量 */ 6 #define MAX_L 15 /* 每种颜色名称的最大长度 */ 7 8 int main(void) 9 { 10 char color_table[MAX_N][MAX_L]; /* 存储不同种类的颜色名称 */ 11 unsigned int count[MAX_N], total; /* 存储每种颜色出现的次数和种类数 */ 12 char color[MAX_L]; /* 用于缓存输入的颜色 */ 13 int i, j, flag, num; /* 存储将要输入的颜色数量 */ 14 int popular; /* 存储最受欢迎颜色索引 */ 15 16 scanf("%d", &num); 17 while (num > 0){ 18 total = 0; 19 memset(count, 0, sizeof(count)); 20 21 for (i = 0; i < num; i++){ 22 scanf("%s", color); /* 读入一种颜色 */ 23 24 /* 检查该颜色是否已经存在 */ 25 flag = 0; 26 for (j = 0; j < total; j++){ 27 if (strcmp(color, color_table[j]) == 0){ 28 count[j]++; 29 flag = 1;//表示找到该颜色 30 break; 31 } 32 } 33 /* 该颜色不存在,将其添加到颜色表中 */ 34 if (flag == 0) { 35 strcpy(color_table[total], color); 36 count[total]++; 37 total++; 38 } 39 } 40 41 /* 寻找最受欢迎颜色 */ 42 popular = 0; 43 for (i = 1; i < total; i++){ 44 if (count[popular] < count[i]){ 45 popular = i; 46 } 47 } 48 printf("%s ", color_table[popular]); 49 50 scanf("%d", &num); 51 } 52 53 return 0; 54 }