<div id="7x91n"></div>
    <progress id="7x91n"><tr id="7x91n"><ruby id="7x91n"></ruby></tr></progress>

    <em id="7x91n"></em>
      <progress id="7x91n"></progress>

      <dl id="7x91n"><ins id="7x91n"></ins></dl>

          <div id="7x91n"></div>

          <dl id="7x91n"></dl>

          <dl id="7x91n"><ins id="7x91n"><thead id="7x91n"></thead></ins></dl>

            <div id="7x91n"><tr id="7x91n"></tr></div>

            <div id="7x91n"></div>
            <div id="7x91n"></div>
            <dl id="7x91n"></dl><dl id="7x91n"><ol id="7x91n"></ol></dl>
            首頁 > 其他 > 詳細

            網易秋招校招編程題

            時間:2018-09-08 19:40:21      閱讀:191      評論:0      收藏:0      [點我收藏+]

            標簽:println   測試用例   align   只有一個   測試   發現   ++   正式   圖片   

              網易內推面試涼了,再戰正式批筆試,選擇和簡答略難,編程題很良心,基本就是模擬、找規律,略加思考就能解出來的題目,本弱雞只有在良心網易筆試才能AK。

            1、翻轉翻轉

              技術分享圖片

              這題一開始沒思路,ac了后兩題后再回來思考,發現只需要判斷某個位置周圍有幾個點,就代表了那個位置會被別的點翻轉幾次,那么如何求周圍有幾個點呢?

              簡單的把位置分成3類:

                一類是四個頂點:每個頂點會被翻轉4次(加上自己翻轉一次)。

                第二類是四條邊(不含頂點):邊上的點會被翻轉6次。

                第三類就是中間部分:中間的每個點會被翻轉9次。

              因此翻轉9次的點就是我們需要的啦,求出中間部分的數量即可,再考慮只有一條邊的時候,只有一個點的時候是特殊的,別的都是邊長度 -2 。

              (坑!數據量n,m是10^10,所以相乘的結果肯定比int大,要用long!然后2*(n+m-2)沒用long轉型也沒過,小小的懷疑一下數據是不是比給的10^10范圍還要大一點點)。

              代碼如下:

             1     public static void main(String[] args) {
             2         Scanner in = new Scanner(System.in);
             3         while (in.hasNextInt()) {// 注意while處理多個case
             4             int t = in.nextInt();
             5             while (t != 0) {
             6                 int n = in.nextInt();
             7                 int m = in.nextInt();
             8                 helper(n,m);
             9                 t--;
            10             }
            11         }
            12     }
            13     
            14     
            15     static void helper(int n,int m){
            16         if(m < n){
            17             int t = n;
            18             n = m;
            19             m = t;
            20         }
            21         if(n == 1 && m == 1){
            22             System.out.println(1);
            23         }else if (n == 1) {
            24             System.out.println(m-2);
            25         }else {
            26             long res = 1;
            27             System.out.println(res*n*m-2*(n+m-2));
            28         }
            29     }

            2、買房

              技術分享圖片

              找規律:

              最小可能就是所有人都擠在一起,不管怎么樣都沒有位置可以住,所以直接輸出0,

              最大可能分成兩種情況:

                已經住進去的人比房子數一半(實際是一半+1)小,那么就可以“#.#.#”這樣排序,那么最大的可能數就是已經住進去的人數減1。

                另一種情況,多出來的人會把可能的位置占掉,那么最多情況就是剩下的空位,因為每個位置都是可以住的。

              上代碼:

             1     public static void main(String[] args) {
             2         Scanner in = new Scanner(System.in);
             3         while (in.hasNextInt()) {//注意while處理多個case
             4             int t = in.nextInt();
             5             while(t!=0){
             6                 int n = in.nextInt();
             7                 int k = in.nextInt();
             8                 int max = 0;
             9                 if(k >= 2 && n > k){
            10                     if(k <= (n+1)/2){
            11                         max = k-1;
            12                     }else {
            13                         max = n-k;
            14                     }
            15                 }
            16                 
            17                 System.out.println(0 + " " + max);
            18                 t--;
            19             }
            20         }
            21     }

            3、倒香檳

              技術分享圖片

              想了幾分鐘沒有特別好的解法,只能硬著頭皮模擬,n,m的數據量有兩個令我很疑惑,當時的想法就是做個模擬跑個20%的測試用例也夠了,然后模擬完了之后發現過了!!  

              上代碼:

                public static void main(String[] args) {
                    Scanner in = new Scanner(System.in);
                    while (in.hasNextInt()) {//注意while處理多個case
                        int n = in.nextInt();//n層
                        int m = in.nextInt();//m條指令
                        int[] array = new int[n+1];
                        int[] now = new int[n+1];
                        for(int i = 0;i<n;i++){
                            array[i+1] = in.nextInt();
                        }
                        for(int j = 0;j<m;j++){
                            int inc = in.nextInt();
                            if(inc == 2){
                                int deepth = in.nextInt();
                                int num = in.nextInt();
                                add(deepth, num, array, now);
                            }else if (inc == 1) {
                                int deepth = in.nextInt();
                                System.out.println(now[deepth]);
                            }
                        }
                    }
                }
                
                static void add(int n,int num,int[] array,int[] now){
                    int maxadd = 0;
                    for(int i = n;i<array.length;i++){//每一層流下來
                        maxadd = array[i] - now[i];
                        if(maxadd >= num){//比當前層最多能容納的少就直接倒進去,返回
                            now[i] += num;
                            return;
                        }
                        now[i] = array[i];
                        num -= maxadd;
                     }
                }

             

            網易秋招校招編程題

            標簽:println   測試用例   align   只有一個   測試   發現   ++   正式   圖片   

            原文:https://www.cnblogs.com/zzzdp/p/9610135.html

            (0)
            (0)
               
            舉報
            評論 一句話評論(0
            0條  
            登錄后才能評論!
            ? 2014 bubuko.com 版權所有 魯ICP備09046678號-4
            打開技術之扣,分享程序人生!
                         

            魯公網安備 37021202000002號

            福建省餐饮许可现场