2010-11-11 10:27:23
题目地址:http://acm.fzu.edu.cn/problem.php?pid=1371
这样悲剧的错误我还得犯多少个?!!!简单而不易发现的错误又夺走了我一个多小时的时间!!!!!
这次犯的错误跟代码顺序有关!!!
#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct
{ char ca[100],pa[100];
int v;
}DATE;
int main()
{
DATE *p1,*p,*pm;
int i,m,n,flag;
char str[100];
while(scanf("%d",&n)!=EOF)
{
getchar();
p1=(DATE *)calloc(n,sizeof(DATE) );
for(p=p1;p<p1+n;p++)
{
gets(p->ca);
gets(p->pa);
} // 输入参选人及其相应的党
scanf("%d",&m); getchar();
for(i=0;i<m;i++)
{
gets(str);
for(p=p1;p<p1+n;p++)
if(strcmp(str,p->ca)==0) {p->v++;break;} // 模拟投票
}
flag=1;
for(p=p1+1,pm=p1;p<p1+n;p++)
{
if(pm->v<p->v) { pm=p ; flag=1;} // ①
if(pm->v==p->v ) flag=0; // ②
} // 找出得票最多的参选人
if(flag) printf("%s/n",pm->pa);
else printf("tie/n");
free(p1);
}
return 0;
}
就是因为代码中①、②两语句的顺序让我的代码一直AC不了,当①if语句执行时pm=p,导致下面的②if语句也成了真而执行,所以flag无法标记出得票最多的当选人是否有多个!!!!!