您的位置:首页 > 其它

京东2016实习题目-选举游戏-小东和其他小朋友正在玩一个关于选举的游戏。选举是通过投票的方式进行的,得票最多的人将获胜。

2016-04-12 22:57 477 查看


编程1 -- 选举游戏


题目

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的情况。

输出

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

样例输入

5

5 1 11 2 8

4

1 8 8 8

2

7 6

样例输出

4

6

0
// JD_3.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include<iomanip>
#include <iostream>
using namespace std;

int maxIndex(int c[],int length){ ///查找最大值的下标
int  index=0;
int max=c[0];
for(int i=1;i<length;i++){
if(max<c[i]){
index=i;
max=c[i];
}
}
return index;
}
void manage(int c[],int length){/////使c[0]+1;使最大值-1;
int  index=0;
int max=c[0];
for(int i=0;i<length;i++){
if(max<c[i]){
index=i;
max=c[i];
}
}
--c[index];
++c[0];
}
int  getVote(int c[],int length){
int count=0;
while(maxIndex(c,length)!=0){
++count;
manage(c,length);
}
for(int i=1;i<length;i++)////还有处理之后又重复的情况,比如5,1,11,2,8,处理的过程有个是:8,1,8,2,8那么还需要使count+1才行
{ if(c[0]==c[i])
{ ++count;
break;}////遇到第一个相等的就退出for循环,不能再往后查找
}
return count;
}
int main()
{
int n;
int b[100]={0};
int i=0,j=0,k=0;
while(cin>>n){
for(i=0;i<n;i++){
cin>>b[i];
}
cout<<getVote(b,n)<<endl;////这个函数的执行要在while{}里面
}
system("pause");
return 0;
}


如下:

4

1 8 8 8

6

5

5 1 11 2 8

4

2

7 6

0

2

6 7

1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  选举游戏 京东 算法