2020年美團春招 技術綜合試卷第一題

題目描述:

      扎金花是一種非常受歡迎的紙牌遊戲。而在遊戲界有一種於扎金花類似的玩法,叫做扎銀花。

      相比於扎金花的牌型多變,扎銀花就簡單多了,雖然同樣是三張牌比大小,在扎銀花的規則裏只需要把三張牌的點數相加再進行大小比較即可,點數大的人獲勝。

      今天我們玩的不是撲克牌,而是一種取值範圍在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));
    }

}

解題結果

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章