一、前言
京東的一道筆試題,大意如下。
小東與其他人玩遊戲,每個人都有候選票,投票票數最多的人獲勝,在投票之前可以預測每個人有多少票,請問小東最少需要從別人那裡拉多少票才能保證她獲勝,拉完票之後其他人的票數可能為0。
如有如下輸入:
2
1 4
第一行表示總共有兩個候選人,並且小東的預測票數為1,另外一個候選人票數為4。
輸出如下:
2
表示小東需要拉兩票就保證她獲勝。
再如輸入:
4
7 6 6 6
輸出如下:
0
二、源程式
其實這道題目不算太難,關鍵是要找到正確思路,原始碼如下
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
int[] candidate = new int[num];
for (int i = 0; i < num; i++) {
candidate[i] = scan.nextInt();
}
scan.close();
// 小東當前的選票
int vote = candidate[0];
// 其他人的選票
int[] others = new int[candidate.length - 1];
for (int i = 0; i < candidate.length - 1; i++) {
others[i] = candidate[i + 1];
}
// 對其他人的選票進行排序
Arrays.sort(others);
int count = 0;
while (vote <= others[others.length - 1]) { // 小於最大選票
count++; // 增加需要的拉票數
vote++; // 增加小東當前的選票
others[others.length - 1]--; // 減少最大選票
Arrays.sort(others); // 再次排序
}
System.out.println(count);
}
}
三、總結
首先需要好好分析題目,然後找好思路,這很很重要,謝謝各位園友觀看~