c语言简单题,求改错
#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;}#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
看到问题了吗?
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初始化。逻辑问题。。。