題目描述:
扎金花是一種非常受歡迎的紙牌遊戲。而在遊戲界有一種於扎金花類似的玩法,叫做扎銀花。
相比於扎金花的牌型多變,扎銀花就簡單多了,雖然同樣是三張牌比大小,在扎銀花的規則裏只需要把三張牌的點數相加再進行大小比較即可,點數大的人獲勝。
今天我們玩的不是撲克牌,而是一種取值範圍在1-10^9以內的簡單牌,兩個人一開始各自有n張牌,他們會想辦法組合出最大的牌,請你計算出獲勝的一方的三張牌的點數之和。
輸入
輸入第一行僅包含一個正整數n,代表雙方掌握的牌的數量。(3<=n<=20000)
接下來有2行,每行有n個數字,分別代表雙方可選的n張牌。
輸出
輸出僅包含一個正整數,即獲勝的一方的最大牌型的點數之和,當然是可能有平局的,此時答案也是唯一的。
樣例輸入
5 1 2 3 4 5 1 2 3 4 6
樣例輸出
13
解題思路
遍歷數組,找到最大的三個數即可。需要注意的是,數字的範圍是1-1000000000,若三個數加和很容易超出int的範圍,因此使用long型。
解題代碼
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = Integer.valueOf(in.nextLine());
String s1 = in.nextLine();
String s2 = in.nextLine();
String[] l1 = s1.split(" ");
String[] l2 = s2.split(" ");
long[] k1 = {0, Integer.valueOf(l1[0]), Integer.valueOf(l1[1]), Integer.valueOf(l1[2])};
long[] k2 = {0, Integer.valueOf(l2[0]), Integer.valueOf(l2[1]), Integer.valueOf(l2[2])};
for (int i = 3; i < n; i++) {
long num1 = Integer.valueOf(l1[i]);
long num2 = Integer.valueOf(l2[i]);
k1[0] = num1;
Arrays.sort(k1);
k2[0] = num2;
Arrays.sort(k2);
}
long sum1 = k1[1] + k1[2] + k1[3];
long sum2 = k2[1] + k2[2] + k2[3];
System.out.println(Math.max(sum1, sum2));
}
}
解題結果