杭电1004,请问我的代码为什么不能AC,我用了测试例子,貌似都通过了,就是AC不了

#include<stdio.h>#include<string.h>intmain(){charscolor[30];charcolor[2000][30];intex... #include<stdio.h>
#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;
}
展开
 我来答
495006387
2013-01-11 · TA获得超过338个赞
知道小有建树答主
回答量:196
采纳率:0%
帮助的人:261万
展开全部

首先你的判断太麻烦了,虽然看起来好像是输入结束答案就出来了,其实你完全没必要这么做,代码以逻辑清晰为好,你完全可以将全部的颜色都统计出来后再找出那个最大的。你的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 广告
稳频稳压电源哪家好?艾普斯电源(苏州)有限公司开始专业研发、制造及营销交流稳压电源,满足全球电子及信息业对电源设备日益蓬勃的市场需求。迄今为止,业已发展成为交流不间断电源、稳压电源、变频电源、中频航空- 军事专用电源、直流电源、逆变电源等产... 点击进入详情页
本回答由艾普斯提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式