首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c语言容易题,求改错

2012-10-12 
c语言简单题,求改错C/C++ code#include stdio.hvoid bubble(int *a,int n) {int i,j,tempfor(i0in-1

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初始化。逻辑问题。。。

热点排行