京东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
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析