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

编程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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二十六画生的博客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值