杭电1004,请问我的代码为什么不能AC,我用了测试例子,貌似都通过了,就是AC不了
#include<string.h>
int main(){
char scolor[30];
char color[2000][30];
int exit=0;
//int max=0;
int n;
while(scanf("%d",&n),n){
int count[2000]={1};
int max=0;
for(int i=0;i<n;i++){
scanf("%s",scolor);
if(i==0)
strcpy(color[i],scolor);
for(int j=0;j<i;j++)
if(strcmp(scolor,color[j])==0){
count[j]++;
if(count[j]>count[max])
max=j;
}
else{
strcpy(color[i],scolor);
count[i]++;
}
}
printf("%s\n",color[max]);
}
return 0;
} 展开
首先你的判断太麻烦了,虽然看起来好像是输入结束答案就出来了,其实你完全没必要这么做,代码以逻辑清晰为好,你完全可以将全部的颜色都统计出来后再找出那个最大的。你的for循环和你的count[i]++用是同一个变量,你确定没问题吗?同时你的else是有问题的,我把你的计数结果输出来了,你会发现结果是不对的。
如果输入
4
red
blue
blue
green
按你的逻辑计数值是
以下是我写的代码,思路很清晰。
#include<cstdio>
#include<map>
#include<string>
int main()
{
int n;
int count[1010];
char color[20];
char colorList[1010][20];
while(scanf("%d",&n)!=-1)
{
if(n==0)break;
int pos=0,j;
memset(count,0,sizeof(count));
for(int i=0;i<n;i++)
{
scanf("%s",color);
for(j=0;j<pos;j++)
{
if(strcmp(color,colorList[j])==0)
{
count[j]++;
break;
}
}
if(j>=pos)//表示这是一种新颜色,则添加进去,颜色种数加1
{
strcpy(colorList[pos],color);
count[pos]++;
pos++;
}
}
//这儿比较大小
int m=0;
for(int i=1;i<pos;i++)
if(count[i]>count[m])m=i;
for(int i=0;i<pos;i++)
{
printf("%d ",count[i]);
}
printf("\n");
printf("%s\n",colorList[m]);
}
return 0;
}
2024-07-18 广告