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;
}