选举游戏

来源:互联网 发布:bestgore知乎 编辑:程序博客网 时间:2024/06/10 01:22

题目:

小东和其他小朋友正在玩一个关于选举的游戏。选举是通过投票的方式进行的,得票最多的人将获胜。小东是编号为1的候选者,此外还有其他的候选者参加选举。根据初步的调查情况,所有准备投票的小朋友都有一定的投票倾向性,小东如果要获得胜利,必须争取部分准备为其他候选人投票的小朋友。由于小东的资源较为有限,她希望用最小的代价赢得胜利,请你帮忙计算她最少需要争取的选票数。

输入

输入有若干组,每组包含两行,第一行为一个正整数n(2<=n<=100),表示候选者的数量,第二行为每个候选人预期得到的选票数,以空格分开,每人的预期得票数在1到1000之间(包含1和1000)。

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

输出

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

考察:递归的实现

我的答案:

import java.util.ArrayList;import java.util.Collections;import java.util.Iterator;import java.util.List;import java.util.Scanner;public class Main {public static void main(String[] args){Scanner in = new Scanner(System.in);List<Integer> list = new ArrayList<>();while(in.hasNext()){int n = in.nextInt();//候选人数目int m = in.nextInt();//小明预期选票for(int i=0;i<n-1;i++){list.add(in.nextInt()); //其他候选人预期选票}int result = fun(list,m);System.out.println(String.valueOf(result));}}public static int fun(List<Integer> list,int num){int max = 0;int temp = 0;for(int i=0;i<list.size();i++){if(num > list.get(i)){list.remove(i--);}} //删除比小明小的人if(list.size()!=0){max = Collections.max(list);for(int i=0;i<list.size();i++){if(list.get(i) == max){temp = i;}} //找到最大数的位置list.set(temp, list.get(temp)-1);num++;return 1 + fun(list,num);}else{return 0;}}}




原创粉丝点击