• 网易秋招校招编程题


      网易内推面试凉了,再战正式批笔试,选择和简答略难,编程题很良心,基本就是模拟、找规律,略加思考就能解出来的题目,本弱鸡只有在良心网易笔试才能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;
             }
        }
  • 相关阅读:
    MySQL教程115-MySQL查看触发器
    MySQL教程114-MySQL创建触发器
    MySQL教程113-MySQL流程控制语句
    MySQL教程112-MySQL游标的定义及使用
    MySQL教程111-MySQL定义条件和处理程序
    MySQL教程110-MySQL变量的定义和赋值
    MySQL教程109-MySQL调用存储过程和函数
    MySQL教程108-MySQL存储函数
    mysql 启动关闭流程
    mysql 连接管理工具
  • 原文地址:https://www.cnblogs.com/zzzdp/p/9610135.html
Copyright © 2020-2023  润新知