题目描述
又到一年竞赛时,每当看到气球升起来,是多么令人兴奋呀。告诉你一个秘密,裁判总是热衷于猜哪题是最流行的题。比赛结束后,只要统计一下所有的气球颜色就能得到答案。
今年,他们决定把这个工作留给你来完成。输入
输入包括多组测试样例,每个测试数据都是以数字N开始 (0 < N <= 1000) ,它标识分发的气球总数。接下来的N行就是不同颜色的气球,气球颜色是一个不超过15个字符的字符串。
当N=0时表示输入结束。输出
对于每组数据,输出最流行的问题对应的颜色。这里保证每个测试数据只会有一个答案。
样例输入 复制
5 green red blue red red 3 pink orange pink 0
样例输出 复制
red pink
首先,题目的要求是统计每个字符串出现的次数,然后输出出现次数最多的那个字符串。因此,我们可以使用一个数组来存储每个字符串出现的次数,并记录出现次数最多的字符串。
由于每个测试数据中有多个字符串,而且字符串的数量未知,因此我们需要使用循环结构来读入并统计字符串出现次数。具体来说,我们可以使用while循环不断读入每个测试数据,直到读到了N=0为止。在while循环内部,我们定义了一个char类型的数组color[20],用于暂存输入的字符串。
接下来的任务就是统计字符串出现的次数。对于每个字符串,我们需要遍历之前所有已经输入的字符串,找到是否存在相同的字符串,如果存在则将该字符串出现次数加1;否则说明是新的字符串,将该字符串出现次数设置为1即可。
遍历之前所有字符串的过程可以使用两层for循环来完成。外层循环枚举到当前输入的字符串为止,内层循环枚举之前所有的字符串,逐一比较是否有与当前输入的相同的字符串。如果找到了相同的字符串,则将该字符串出现次数加1并退出内层循环;否则说明当前字符串是新的字符串,将其出现次数设置为1并退出内层循环。在这个过程中,我们需要记录出现次数最多的字符串及其出现次数。
最后,遍历所有字符串的出现次数,找到出现次数最多的那个字符串并输出即可。
但是关于这道题,我一直是有疑问的,这个到底是怎么和之前的字符串比对的
最后 在cjy老师的指导下,发现这个程序本身就是错误的,为了混分而混分()/
真离谱,还是要有批判精神的,不然空想半个小时多嗷。
#include <stdio.h>
#include <string.h>
#define MAX_N 1000
int main()
{
int n;
char color[20];
while (scanf("%d", &n) != EOF && n > 0)
{
int maxCount = 0;
char maxColor[20] = "";
int count[MAX_N] = {0};
for (int i = 0; i < n; i++)
{
scanf("%s", color);
for (int j = 0; j <= i; j++)
{
if (strcmp(color, maxColor) == 0)
{
count[j]++;
break;
}
else if (j == i)
{
strcpy(maxColor, color);
count[i]++;
break;
}
}
}
for (int i = 1; i < n; i++)
{
if (count[i] > count[maxCount])
{
maxCount = i;
}
}
printf("%s\n", maxColor);
}
return 0;
}
独立自主的正确的代码!耶 幸福的
#include <stdio.h>
#include <string.h>
//全局变量 二维数组,用来存放第几个+颜色。
char color[1005][20];
int main()
{
int n;
while (scanf("%d", &n) != EOF && n > 0)
{
int num[1005];
int max=-1;
int p;
memset(num,0,sizeof(num));
memset(color,0,sizeof(color));
for(int i=0;i<n;i++)
{
scanf("%s",&color[i]);
for(int j=0;j<=i;j++)
{
if(color[i]==color[j])
{
num[j]++;
}
}
}
for(int k=0;k<n;k++)
{
if(num[k]>max)
{
max=num[k];
}
p=k;
}
printf("%s\n",color[p]);
}
return 0;
}