1. 程式人生 > >廈理OJ——1003:第三屆程式設計大賽 讓氣球飛起來

廈理OJ——1003:第三屆程式設計大賽 讓氣球飛起來

一、題目

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還沒想好