内容:
abc三个人,n个人投票(n需要输入),统计abc三人的票数,abc三个字母以外的字符为弃权,按得票多少打印候选人和票数(相同票数按abc字母顺序输出)
输入说明:
第一行 n 代表有个人投票
第二行有n个字符(字母不区别大小写,如a和A都代表投给a票,abc 以外的字符弃权)
输出说明:
输入样例:
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();
}
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 :;
执行不同语句的case后面须加 break ,执行相同语句的case可合并起来
下面用冒泡排序排序排一下,然后输出就行了