首页 新闻 会员 周边

各位看下我的代码哪里有问题

0
悬赏园豆:20 [已关闭问题]

内容:

abc三个人,n个人投票(n需要输入),统计abc三人的票数,abc三个字母以外的字符为弃权,按得票多少打印候选人和票数(相同票数按abc字母顺序输出)

输入说明:

第一行 n 代表有个人投票

第二行有n个字符(字母不区别大小写,如a和A都代表投给a票,abc 以外的字符弃权)

输出说明:

三行每行第一为字母(只能为abc之一,然后是得票数),按从大到小顺序

输入样例: 

若题目没有特别说明,则应该以多组测试数据方式读取,或者参考a001。
6abcA1b

 

输出样例 :

a 2
b 2
c 1
 
我写的:

/* 投票统计 */

#include <stdio.h>
int main()
{
    int a=0,b=0,c=0,i,n;        /* a,b,c分别表示a,b,c的票数,n表示投票人数 */
    scanf("%d",&n);
    for(i=0;i<n;i++)            /* 投票  */
    {
        char x;
  printf("Enter yout vote:\n");
  scanf("%c",&x);
        switch(x){
            case 'a':a++;
            case 'A':a++;
            case 'b':b++;
            case 'B':b++;
            case 'c':c++;
            case 'C':c++;
            default :;
        }
    }
    if(a>=b&&b>=c)                  /* 按大小输出投票结果 */
    {
        printf("a  %d\n",a);
        printf("b  %d\n",b);
        printf("c  %d\n",c);
    }
    if(a>=c&&c>=b)
    {
        printf("a  %d\n",a);
        printf("c  %d\n",c);
        printf("b  %d\n",b);
    }
    if(b>=a&&a>=c)
    {
        printf("b  %d\n",b);
        printf("a  %d\n",a);
        printf("c  %d\n",c);
    }
    if(b>=c&&c>=a)
    {
        printf("b  %d\n",b);
        printf("c  %d\n",c);
        printf("a  %d\n",a);
    }
    if(c>=a&&a>=b)
    {
        printf("c  %d\n",c);
        printf("a  %d\n",a);
        printf("b  %d\n",b);
    }
    if(c>=b&&b>=a)
    {
        printf("c  %d\n",c);
        printf("b  %d\n",b);
        printf("a  %d\n",a);
    }
    getch();
}

 

 

 
 
问题补充: 除了代码有问题,还感觉自己代码很冗长,怎么优化?
老7的主页 老7 | 初学一级 | 园豆:170
提问于:2009-12-28 17:18
< >
分享
其他回答(1)
0
 if(a>=b&&b>=c)                  /* 按大小输出投票结果 */
    {
        printf("a  %d\n",a);
        printf("b  %d\n",b);
        printf("c  %d\n",c);
    }
    if(a>=c&&c>=b)
    {
        printf("a  %d\n",a);
        printf("c  %d\n",c);
        printf("b  %d\n",b);
    }
    if(b>=a&&a>=c)
    {
        printf("b  %d\n",b);
        printf("a  %d\n",a);
        printf("c  %d\n",c);
    }
    if(b>=c&&c>=a)
    {
        printf("b  %d\n",b);
        printf("c  %d\n",c);
        printf("a  %d\n",a);
    }
    if(c>=a&&a>=b)
    {
        printf("c  %d\n",c);
        printf("a  %d\n",a);
        printf("b  %d\n",b);
    }
    if(c>=b&&b>=a)
    {
        printf("c  %d\n",c);
        printf("b  %d\n",b);
        printf("a  %d\n",a);
    }
    getch();
}
可以改为一个排序输出就OK了
      switch(x){
            case 'a':a++;
            case 'A':a++;
            case 'b':b++;
            case 'B':b++;
            case 'c':c++;
            case 'C':c++;
            default :;

这句要改改,不然问题很大
      switch(x){
            case 'a':
            case 'A':a++;break;
            case 'b':
            case 'B':b++;break;
            case 'c':
            case 'C':c++;break;
            default :;
飞飞cq | 园豆:193 (初学一级) | 2009-12-29 09:18
0

执行不同语句的case后面须加 break ,执行相同语句的case可合并起来

下面用冒泡排序排序排一下,然后输出就行了

琳琅 | 园豆:200 (初学一级) | 2009-12-29 15:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册