厦理OJ——1003:第三届程序设计大赛 让气球飞起来

版权声明:转载请声明 作者:SpacePioneer https://blog.csdn.net/SpacePioneer/article/details/83824988

一、题目

Description

比赛又一次开始了,看着气球漂浮在周边是多么兴奋的事情啊,但是告诉你一个秘密,裁判最喜欢做的事情就是猜一个问题,即数目最多的气球颜色。当比赛结束时,他们会数每种颜色的气球数目并公布结果。今年,他们决定将数气球的事情交给你做。

Input

测试数据第一行是一个N(0 < N <= 100),表示放飞的气球总数;紧接着的N行中每行表示一种气球颜色。每种气球颜色是由不多于15个小写字母组成。

Output

对于每组测试数据,对应一行输出颜色最多的气球颜色,测试数据能保证对应的结果唯一。

Sample Input

5
green
red
blue
red
red

Sample Output

red

二、解析

本题的思路非常简单,只要读颜色,读到之前读过的颜色那么个数就加一。但是在程序的设计上可能会有点复杂。

对于这个思路,我们先定义一个结构体BLN(还没学结构体的可以看下面另一种思路),参数包括字符串变量color和整型变量num,很容易看出这是用来相同颜色气球计数的,由于N的最大值为100,所以我们先创建个数为100的balloon变量用于计数。

接着对每个颜色分别进行读取,每读取一总颜色就遍历已有颜色,若已含有该颜色,则将该颜色数量加一,即BLN结构体中num值。若不存在,则新建该颜色,并将数量赋值为1。

在将所有颜色遍历完后,再对所有颜色的数量进行比较,输出最大数对应的颜色。

可能有人还没学过结构体,所以这里再用C风格字符串(字符串都还没学过的可以跳过这题了QAQ)做一个解题思路,代码未给出。

首先解题的大致思路还是一样的,只是变量的设置发生变化,我们需要创建一个字符串数组char *color[100]和整型的数组int num[100]作用和之前的结构体一样,只要将读入的颜色保存在color里,当读到重复的颜色是我们可以得到这个颜色在color中对应的角标,假设为i,那我们将num[i]进行加一就可以起到计数的效果,直到所有颜色读完,找出num中最大的数,同样得到角标j,输出color对应的颜色color[j]即可。

三、源码

#include <iostream>
#include <string>//在C语言中不能使用  可以使用char* 定义字符串
//C语言
//#include <stdio.h>
//#include <string.h>

using namespace std;


struct BLN
{
	string color;//char *color;
	int num;

};


int main_1003()
{
	BLN balloon[100];                //颜色计数结构体
	int color_num = 0;               //颜色数量
	bool IS_have_color = false;      //是否有相同颜色

	int N;
	cin >> N;//scanf("%d",&N);



	for (int i = 0; i < N; i++)
	{
		//读取每一个颜色
		string color_in;//char *color_in;
		cin >> color_in;//scanf("%s",&color_in);
		//遍历已有颜色
		for (int j = 0; j < color_num; j++)
		{
			if (balloon[j].color == color_in)
			{
				balloon[j].num++;
				IS_have_color = true;
				break;
			}
		}
		//若颜色不存在 则新建颜色
		if (!IS_have_color)
		{
			balloon[color_num].color = color_in;
			balloon[color_num].num = 1;
			color_num++;
		}

		IS_have_color = false;
	
	}

	int num_out = 0;

	//循环遍历每个颜色个数 输出最大的颜色
	for (int i = 0; i < color_num; i++)
	{
		num_out = balloon[i].num > balloon[num_out].num ? i: num_out;
	}

	cout << balloon[num_out].color;//printf("%s",balloon[num_out].color);


	return 0;
}

四、深入研究

emmm还没想好

猜你喜欢

转载自blog.csdn.net/SpacePioneer/article/details/83824988