FOJ 1371 Election

      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无法标记出得票最多的当选人是否有多个!!!!!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值