题目
题目简述
输入包含多个测试用例,每个测试用例先输入一个N,接下来有N行,每行输入一串最多15个小写字母(气球的颜色),如果N=0,则终止输入并且不处理该测试用例。对于每个测试用例,输出气球最多的颜色。
思路
分别定义一个输入数组in和一个输出数组ou和一个计数数组num,使用while循环实现多个测试用例的输入。对于每个测试用例,在输入N后,使用for循环逐个输入字符串(气球的颜色),将第一行的气球的颜色in[0]通过串复制赋值给ou[0],从第二行开始,每输入一个字符串,判断其与之前的输入的字符串是否相同,若相同,对应的计数数组num[k]自增一次;若不同,则将该字符串赋值给一个新的输出数组ou[k+1]。完成输入后,通过一个循环查找计数数组中的最大值num[i],并记录该值的下标,输出该下标对应的输出数组中的字符串ou[i]即可。
代码实现
#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
int main()
{
char in[1001][16], ou[1001][16];
int num[1001] = { 0 }, n;
while (scanf("%d", &n) != EOF && n)
{
if (n == 0) break;
int j = 0;
for (int i = 0; i < n; i++)
{
int work = 1;
scanf("%s", in[i]);
strcpy(ou[0], in[0]);
for (int k = 0; k < j; k++)
{
if (strcmp(in[i], ou[k]) == 0) { num[k]++; work = 0; }
}
if (work)
{
strcpy(ou[j + 1], in[i]);
j++;
num[j] = 1;
}
}
int pos = 0;
int max = 0;
for (int i = 0; i < n; i++)
{
if (num[i] > max)
{
max = num[i];
pos = i;
}
}
cout << ou[pos] << endl;
}
return 0;
}