c语言简单题,求改错
- C/C++ code
#include <stdio.h>void bubble(int *a,int n) { int i,j,temp; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; }} int main(){ int i,n,state[101],m=0; while(scanf("%d",&n)) { if(n==0)break; for(i=0;i<n;i++) scanf("%d",&state[i]); bubble(state,n); n=n/2+1; for(i=0;i<n;i++) m+=state[i]/2+1; printf("%d\n",m); } return 0;}编译通过,提交oj,为wrong answer
题目:
http://www.acm.uestc.edu.cn/problem.php?pid=1020
Description
美国大选是按各州的投票结果来确定最终的结果的,如果得到超过一半的州的支持就可以当选,而每个州的投票结果又是由该州选民投票产生的,如果某个州超过一半的选民支持希拉里,则她将赢得该州的支持。现在给出每个州的选民人数,请问希拉里至少需要赢得多少选民的支持才能当选?
Input
多组输入数据
每组数据的第一行包括一个整数N(1<=N<=101),表示美国的州数,N=0表示输入结束
接下来一行包括N个正整数,分别表示每个州的选民数,每个州的选民数不超过100
Output
对于每组数据输出一行,表示希拉里至少需要赢得支持的选民数
Sample Input
3
5 7 5
0
Sample Output
6
[解决办法]
又见初始化问题。
建议:变量在使用之前声明。
- C/C++ code
#include <stdio.h>void bubble(int *a,int n) { int i,j,temp; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; }} int main(){ int i,n,state[101];; while(scanf("%d",&n)) { if(n==0)break; for(i=0;i<n;i++) scanf("%d",&state[i]); bubble(state,n); n=n/2+1; int m=0; //应该在这里初始化 for(i=0;i<n;i++) m+=state[i]/2+1; printf("%d\n",m); } return 0;}
[解决办法]
给你个测试用例你试试就知道区别了:
3
4 4 4
2
5 5
0
正确的应该是:
6
3
而你的呢:
6
9
看到问题了吗?
- C/C++ code
int main(){ int i,n,state[101],m=0; while(scanf("%d",&n)) { if(n==0)break; for(i=0;i<n;i++) scanf("%d",&state[i]); bubble(state,n); n=n/2+1; for(i=0;i<n;i++) m+=state[i]/2+1; //第一次测试进来,没有问题,能得到正确答案,第二次再进来呢?? printf("%d\n",m); } return 0;}
[解决办法]
每次循环进去都要对m初始化。逻辑问题。。。