京东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
问题分析
输入包括每个候选人预期得到的票数,小东要想赢得选举,则必须要争取
让自己的选票在所有候选人里面最高,最好的办法就是从当前得票最高的人手里争取
过来选票,这样,最高票数肯定少了,自己得票多了,离自己得票最高才会更快的靠近
解决办法
每次从当前得票最高的人手里争取一张选票过来,直到自己的票数最高为止
/*
输入:
输入有若干组,每组包含两行,第一行为一个正整数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; }
相关文章推荐
- 必须知道的社会生活中十二大著名法则
- 创建左划返回手势
- Android自定义控件实现手机摆放位置的校准
- Ruby
- 如何将时间改为显示:几天前,几小时前,或者几分钟前
- java多线程批量执行的时限问题
- java new synchronized
- mysql bigint 取值范围
- A2W和W2A宏可能引起栈内存溢出
- 验证数字的正则表达式集
- android Mediaplayer各种属性和方法简单介绍
- 选择排序
- Machine Learning第九周笔记:异常检测与推荐系统
- MySQL数据库insert和update语句
- 5个典型的JavaScript面试题
- [JS] save txt file
- Anaconda Install
- lambda小结
- 使用anddroid studio编译报错: Error:Execution failed for task ':mergeDebugResources'.
- 关于人工智能和人类未来的吐槽