mckohojal mckohojal
关注数: 19 粉丝数: 57 发帖数: 209 关注贴吧数: 67
新人求助 大神们快进 调查4个电台受欢迎程度。要求用选择排序法将受欢迎程度按照从大到小排列输出,最后给出无效投票的票数。 请定义数组大小为5个整数元素的一维数组accept[5],用于存放4个电台受欢迎的统计信息以及无效投票的票数。假设总的投票数据有n张(n通过scanf()读入),输入的数据1,2,3,4分别对应4个受欢迎的电台编号,其它数据被视作无效投票。 例如当输入n=12,以及如下投票数据时, 1 2 1 2 0 3 1 2 3 1 2 2 表示输入12张投票结果,根据输入的数据结果计算得到电台受欢迎程度的得票情况分别为1号电台是4;2号电台是5;三号电台是2;四号电台是0;无效投票数据为1 上述数据输入后,要求程序的运行按照电台受欢迎程度从大到小以及最后输出无效票数的输出结果为: No2: 5 No1: 4 No3: 2 No4: 0 Invalid: 1 运行要求:重复运行2次, 第1次输入n=3,投票数据为:4 3 1 第2次输入n=12;投票数据为任意12个数 我的程序如下: #include<stdio.h> int main(void) { int i,j,k,x,y,n,v; int a[5]={0,0,0,0,0}; int b[5]; printf("n="); scanf("%d",&n); for (i=1;i<=n;i++){ scanf("%d",&v); switch(v){ case 1:a[0]++;break; case 2:a[1]++;break; case 3:a[2]++;break; case 4:a[3]++;break; default:a[4]++;break; } } for (i=0;i<4;i++) b[i]=a[i]; for (k=0;k<3;k++){ x=k; for(i=k+1;i<4;i++){ if(a[i]>a[x]) x=i; y=a[x]; a[x]=a[k]; a[k]=y; } } for(i=0;i<=3;i++) for(j=0;j<=3;j++) if(a[i]==b[j]){ printf("NO%d:%d\n",j+1,a[i]); break; } printf("Invalid: %d\n",a[4]); return 0; } 程序只在票数不相等时输出正确结果,大神们帮帮忙吧
1 下一页