您的位置:首页 > 其它

京东2016笔试题 小东拉票

2016-04-11 10:17 253 查看
//小东拉票

/*

输入:

输入有若干组,每组包含两行,第一行为一个正整数n(2<=n<=100),表示候选者数量,

第二行为每个候选人预期得到的选票数(第一个为小东的预期选票数),以空格分开,每人的预期得票数在1到1000之间

(包含1和1000)

经过小东的争取后,可能出现候选人的票数为0或超过1000的情况

输出:

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

样例输入:

5

5 1 22 2 8

4

1 8 8 8

2

7 6

样例输出:

4

6

0

问题分析

输入包括每个候选人预期得到的票数,小东要想赢得选举,则必须要争取

让自己的选票在所有候选人里面最高,最好的办法就是从当前得票最高的人手里争取

过来选票,这样,最高票数肯定少了,自己得票多了,离自己得票最高才会更快的靠近

解决办法

每次从当前得票最高的人手里争取一张选票过来,直到自己的票数最高为止

#include <iostream>

using namespace std;

int main()
{
int N;
while (cin >> N)
{
int * votes = new int
;
for (int i = 0; i < N; i++)
{
cin >> votes[i];
}

bool flag = true;
int count = 0;
while (flag)
{
//找到选票最大的人
int imax = 0;
for (int i = 0; i < N; i++)
{
if (votes[i] >= votes[imax])    //注意这里必须是>=,才能保证得票最高,若是>,则会出现并列第一的情况
{
imax = i;
}
}
if (imax == 0)
{
break;
}
else
{
votes[imax]--;
votes[0]++;
count++;
}
}

cout << count << endl;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: