(HDU)1004

编程入门 行业动态 更新时间:2024-10-27 09:44:53

(<a href=https://www.elefans.com/category/jswz/34/1769149.html style=HDU)1004"/>

(HDU)1004

问题描述
比赛时间到啦ヾ(゚∀゚ゞ)! 看到气球漂浮起来是多么鸡冻激动的事情~ 但是告诉你一个秘密,评委们最喜欢猜测哪个问题最受欢迎。 当比赛结束后,他们会计算每种颜色的气球数量,并找到结果。今年,他们决定把这个可爱的工作交给你。输入
输入包含多个测试用例。 每个测试用例以数字N(0 <N <= 1000)开始—— 表示气球的总数。 接下来的N行每行各包含一种颜色。 气球的颜色是最多含有15个小写字母的字符串。当N测试用例为N=0表示终止输入,并且不会处理此测试用例。输出
对于每种情况,在一行上输出最受欢迎问题的气球的颜色。 保证每个测试用例有唯一的解决方案。样例输入5
green
red
blue
red
red
3
pink
orange
pink
0样例输出red
pink
点我查看问题

首先把n个输入颜色存入数组,再用一个对应数组表示这n个颜色处理值,需要遍历两遍。

假设第一次我们的数组得到的结果是这样的:

n123456
colorblackblackredorangeorangeorange
num000000

第一个循环把color数组的字符串都输入好,

接下来第二个循环从第2个字符串开始,统计前面的字符串是否和它相同,相同一次则对应num+=1;

处理完了red的时候,表格是这样的:

n123456
colorblackblackredorangeorangeorange
num010000

处理完最后一个orange,表格是这样的:

n123456
colorblackblackredorangeorangeorange
num010012

 最后对这n个num进行统计,得出num的最大值位于n的哪个值处。

示例是n=6时num最大,输出对应的颜色orange,记得换行。

 1 #include <iostream>
 2 #include <cstdio>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int i,j,n,num[1000],max,t;
 9     char color[1000][16];
10     while(scanf("%d",&n)!=EOF)
11     {
12         if(n)
13         {
14             num[0]=0;
15             scanf("%s",color[0]);
16             for(i=1;i<n;i++)
17             {
18                 num[i]=0;
19                 scanf("%s",color[i]);
20                 for(j=0;j<=i-1;j++)
21                 {
22                     if(strcmp(color[i],color[j])==0)
23                         num[i]+=1;
24                 }
25             }
26             max=0;
27             t=0;
28             for(i=1;i<n;i++)
29             {
30                 if(max<num[i])
31                 {
32                     max=num[i];
33                 t=i;
34                 }
35             }
36             printf("%s\n",color[t]);
37         }
38     }
39     return 0;
40 }
示例代码(C++)

代码改进一,用结构体,将num和color对应起来。

代码改进二,将每个num值初始化为1,这样最后得到的结果可以知道颜色最多出现了几次。

 

思考:如果这题最后需要将颜色按照出现次数由少到多输出,并且输出每个颜色出现的次数怎么办?

修改上述代码有点麻烦,于是换一种思考的方式。

同样需要两个数组color和num(或者结构体)来实现,

额外使用一个temp数组来缓存处理,一个kind的int变量来计算颜色种类。

1.声明时初始化所有num数组值为0,kind的值为0;

2.用strcpy函数将color[0]赋值为'null';(头文件要有string)

3.经过上面的处理后,表格是这样的:(同样使用上面的例子)

kind0      
colornull待处理待处理待处理待处理待处理待处理
num0000000

4.对于这n个气球,单个循环处理:
  将气球颜色输入到temp,用strcmp函数判断temp字符串和已知的color[i]字符串是否相同。(i=0;i<=kind;i++)

  如果相同——对应的num[i]+=1,直接跳出内循环,节省时间处理下一个气球;

  如果不同——注意是在内循环结束之后,kind+=1;color[kind]=temp;num[kind]+=1;

 

之前的例子n=6 black black red orange orange orange

处理到1的时候表格是这样的:

kind01     
colornullblack待处理待处理待处理待处理待处理
num0100000

处理到2的时候表格是这样的:

kind01     
colornullblack待处理待处理待处理待处理待处理
num0200000

处理到3的时候表格是这样的:

kind01 2    
colornullblackred待处理待处理待处理待处理
num0210000

处理到6的时候表格是这样的:

kind01 2   
colornullblackredorange待处理待处理待处理
num0213000

5.每个数据处理完后,我们知道了颜色的种类有kind种,对应名字是color[kind],对应数量是num[kind]。后面的处理可以省略了...

 

这道题保证了出现的次数不相同,可以修改一下,要求颜色出现次数相同的时候,按照字典序排列,其实也没差多少啦。

转载于:.html

更多推荐

(HDU)1004

本文发布于:2024-03-05 20:29:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1713330.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:HDU

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!