杭电1004,Let the Balloon Rise 很郁闷啊,不知道错在哪儿

最近才开始搞ACM,下面是我的代码,真不知哪儿错了,老是WA。请高手帮忙看看,感激不尽!#include<stdio.h>#include<string.h>intmai... 最近才开始搞ACM,下面是我的代码,真不知哪儿错了,老是 WA。请高手帮忙看看,感激不尽!

#include<stdio.h>
#include<string.h>

int main(void)
{
int n,i,j,max,sum;
char clr[1005][20],str[20];
while(scanf("%d",&n)&&n){
for(i=0; i<n; i++)
scanf("%s",clr[i]);
max = -1;
for(i=0; i<n && clr[i][0]!='\0'; i++){
sum = 1;
for(j=i+1; j<n && clr[j][0]!='\0'; j++){
if(!strcmp(clr[i],clr[j])){
sum++;
clr[j][0] = '\0';
}
}
if(sum > max){
max = sum;
strcpy(str,clr[i]);
}
}
printf("%s\n",str);
}
return 0;

}
展开
 我来答
百度网友6f87babd4
2012-03-20 · TA获得超过1395个赞
知道小有建树答主
回答量:948
采纳率:50%
帮助的人:363万
展开全部
你的主要问题是 clr[j][0] = '\0';
比如说,你输入:
5
blue
blue
red
red
red

第二个颜色即blue会因为clr[j][0] = '\0'语句而变成了'\0',又因为for(i=0; i<n && clr[i][0]!='\0'; i++)
语句,i=1时立即停止运行。结果是blue,但正确的结果应该是red.
#include<stdio.h>
#include<string.h>

int main(void)
{
int n,i,j,max,sum;
char clr[1005][20],str[20];
while(scanf("%d",&n)&&n){
for(i=0; i<n; i++)
scanf("%s",clr[i]);
max = -1;
for(i=0; i<n ; i++){ /*删掉&& clr[i][0]!='\0'*/
sum = 1;
for(j=i+1; j<n ; j++){ /*删掉&& clr[j][0]!='\0'*/
if(!strcmp(clr[i],clr[j])){
sum++;
/*clr[j][0] = '\0';*/ /*删掉此行*/
}
}
if(sum > max){
max = sum;
strcpy(str,clr[i]);
}
}
printf("%s\n",str);
}
return 0;

}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式