Let the Balloon Rise HDU - 1004

description

小明现在有多种颜色的气球,需要你统计它们的个数,并找出数量最多的那种颜色。

Input

有多组样例输入。每组样例第一行输入一个整数N (0 < N <= 1000) -- 代表一共有N个气球。接下来N行每行输入一个不多于15个字母的字符串代表颜色。
N=0代表输入结束。

Output

每组样例数据输出数量最多的那种颜色的气球。(保证输出唯一)

Sample Input

5
green
red
blue
red
red
3
pink
orange
pink
0

Sample Output

red
pink

方法一,利用strcmp函数比较

#include <iostream>
#include <cstring>
using namespace std;

char a[1020][20];
int flag;
int main() {
	int t, n = 0;
	while (cin >> t) {
		if (t == 0)
			break;

		flag = 0;
		for (int i = 0; i < t; i++) {
			cin >> a[i];
		}

		for (int i = 0; i < t; i++) {
			int m = 0;
			for (int j = 0; j < t; j++) {
				if (!strcmp(a[i], a[j])) {
					m++;
				}
			}

			if (m > n) {
				n = m;
				flag = i;
			}

		}

		cout << a[flag] << endl;

	}
	return 0;
}

方法二自己编写函数比较

#include <iostream>
#include <cstring>
using namespace std;

char a[1020][20];
int flag;

int strcmpp(char *a, char *b) {
	if (strlen(a) != strlen(b))
		return 1;
	else
		while ((*a == *b) && (*a != '\0')) {
			a++;
			b++;
		};
	if (*a != '\0')
		return 1;
	else
		return 0;
};

int main() {
	int t, n = 0;
	while (cin >> t) {
		if (t == 0)
			break;

		flag = 0;
		for (int i = 0; i < t; i++) {
			cin >> a[i];
		}

		for (int i = 0; i < t; i++) {
			int m = 0;
			for (int j = 0; j < t; j++) {
				if (!strcmpp(a[i], a[j])) {
					m++;
				}
			}

			if (m > n) {
				n = m;
				flag = i;
			}

		}

		cout << a[flag] << endl;

	}
	return 0;
}

方法三利用字符串的定义比较

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main() {
	string s[1001];
	int n, sum[1001];
	while (cin >> n && n) {
		for (int i = 0; i < n; ++i) {
			cin >> s[i];
			sum[i] = 1;
		}

		sort(s, s + n); //字符串排序,将相同的字符串放在一起

		int max = 0;

		for (int i = 1; i < n; i++) {
			if (s[i] == s[i - 1]) //利用整型数组进行同步计数
				sum[i] += sum[i - 1];
			if (sum[i] > sum[max])
				max = i;
		}
		cout << s[max] << endl;
	}
	return 0;
}
//error C2679: 二进制“>>”: 没有找到接受“std::string”类型的右操作数的运算符(或没有可接受的转换)
//原因:未包含#include <string>,还不能是#include <cstring>

方法四利用map

#include <iostream>
#include <string>
#include <map>
using namespace std;

int main() {
	map<string, int>::iterator it;
	map<string, int> p;
	string s, ans;
	int n;
	while (cin >> n, n) {
		p.clear();//否则上一次的仍会被记录
		
		for (int i = 1; i <= n; i++) {
			cin >> s;
			p[s]++;
		}
		
		int maxn = 0;
		
		for (it = p.begin(); it != p.end(); it++) {
			if (it->second > maxn) {
				maxn = it->second;
				ans = it->first;
			}
		}
		
		cout << ans << endl;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值