HDOJ(1004) Let the Balloon Rise

HDOJ(1004) Let the Balloon Rise

这一道题姑且可以叫做“让气球飞”吧。比较简单,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 }