竞赛讨论区 > 本题思路
头像
易水飞霜
发布于 2020-07-21 20:54
+ 关注

本题思路

/*
本题算法思路比较简单,设置五个变量,分别存储ABC的票数、有效票数和总票数。使用while语句和switch语句进行票数统计。
之后对比ABC的票数是否超过总票数的一半,超过了输出对应人员,都不超过就输出全失败。

个人回顾:
1.我使用两个临时变量,一个用来读取数据,当读取为-1时统计结束开始计算(while的退出条件),一个用来统计结果的一半。这两个临时变量可以合成一个(可以节省一个变量空间,虽然没啥太大意义)
2.因为输出有四种,前三种比较相似,因此我采用了二位字符数组存入要输出的内容,以此来规避数组赋值。指针指向数组第一行开头,根据判断改变数组第一行第一位,都不满足则指向第二行。
*3.因为条件是要“超过一半”才算选举成功,因此我使用了 max=all/2+(all%2)|(int)1;这种位操作运算。可以修改为 max=all/2;后面的判断将>=改为>(可以节省几个代码字符,虽然也没啥太大意义)
*/
#include<stdio.h>
int main()
{
    int a,b,c,tot,all;
    int n,max;
    char *num,s[2][7]={" -yes","all-NO"};
    n=1; a=0; b=0; c=0;
    tot=0; all=0;
    while(n!=-1)
    {
        scanf("%d",&n);
        switch(n)
        {
            case 1: a++; tot++; all++; break;
            case 2: b++; tot++; all++; break;
            case 3: c++; tot++; all++; break;
            default: all++;
        }
    }
    printf("A=%d\nB=%d\nC=%d\nTot=%d\n",a,b,c,tot);
    num=s[0];
    max=all/2+(all%2)|(int)1;
    if(a>=max) num[0]='A';
    else if(b>=max) num[0]='B';
    else if(c>=max) num[0]='C';
    else num=s[1];
    printf("%s",num);
    return 0;
}

全部评论

(0) 回帖
加载中...
话题 回帖

本文相关内容

等你来战

查看全部

热门推荐