小程序:选举投票问题&未知行数输入问题(含代码)

本程序想记录一下关于 未知行的输入问题。另外注意一下程序中的realloc函数的调用方式,两次栽到这个函数上,也是醉了。。。

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Problem Description:
小东和其他小朋友正在玩一个关于选举的游戏。选举是通过投票的方式进行的,得票最多的人将获胜。

小东是编号为1的候选者,此外还有其他的候选者参加选举。根据初步的调查情况,所有准备投票的小朋友都有一定的投票倾向性,小东如果要获得胜利,必须争取部分准备为其他候选人投票的小朋友。由于小东的资源较为有限,她希望用最小的代价赢得胜利,请你帮忙计算她最少需要争取的选票数

输入有若干组,每组包含两行,第一行为一个正整数n(2<=n<=100),表示候选者的数量,第二行为每个候选人预期得到的选票数,以空格分开,每人的预期得票数在1到1000之间(包含1和1000)。
经过小东的争取后,可能出现候选人得票数为0或超过1000的情况。

  对每组测试数据,单独输出一行,内容为小东最少需要争取的选票数。

样例:
Input:
5
5 1 11 2 8
4
1 8 8 8
2
7 6

output:
4
6
0

/* * 本程序所用的环境为 windows, VC++6.0 * 输入的结束符为 “ctrl+z” 输入结束符后,按回车,如不能输出,再输结束符,按回车即可 */
#include<iostream>

using namespace std;


int Compute_less_score( int * score, int n ); //计算争取票数的函数,其中score 是每个人的可能得票数组,n是人数

int Compute_less_score( int * score, int n )
{
    int score_dong = *( score + 0 );
    int count = 1 ; //统计票数大于小东的人数
    int score_sum = *( score+0 ); //票数大于小东的总数

    for(int i = 1; i< n; i++ )
    {
        if( *( score+0 ) <= * ( score+i ) )
        {
            count += 1;
            score_sum += * ( score+i );
        }
    }

    int need_score;

    if(count == 1)
        need_score = 0;
    else
        need_score = ( score_sum / count + 1 ) - *( score+0 );
    //cout<< need_score << endl;
    return need_score;

}


int main()
{
    int n;
    int count = 0;
    int init = 1;
    int * a = ( int *)malloc(sizeof(int ) * init);
    while( cin>>n )
    {


        int *score = ( int * ) malloc( sizeof(int) * n );
        for( int i = 0; i<n; i++ )
        {
            scanf("%d",score + i);
        }

        int temp = Compute_less_score( score, n );
        if( count >= init )
        {
            a =(int *) realloc( a, sizeof(int)*( init+1 ));
            init = init + 1;
        }

        *( a+count ) = temp;
        count++;
        free( score );
    }

    for(int i = 0; i< count; i++ )
        cout<< *(a+i) <<endl;

    free(a);


    return 0;
}

你可能感兴趣的:(C++,结束符,未知行输入)