网易秋招校招编程题

  网易内推面试凉了,再战正式批笔试,选择和简答略难,编程题很良心,基本就是模拟、找规律,略加思考就能解出来的题目,本弱鸡只有在良心网易笔试才能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;
         }
    }

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

时间: 2024-11-06 19:27:24

网易秋招校招编程题的相关文章

美团点评2017秋招笔试编程题

美团点评2017秋招笔试编程题 1, 大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步.求玩家走到第n步(n<=骰子最大点数且是方法的唯一入参)时,总共有多少种投骰子的方法. 题解: 写出前面的几个, 1 -> 1;   2 -> 2 ;  3 -> 4;   4 -> 8; 5 -> 16; 6 -> 32; 可以得到是 二的 n-1 次幂. #include <cstdio> int

美团点评2017秋招笔试编程题——大富翁游戏

大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步.求玩家走到第n步(n<=骰子最大点数且是方法的唯一入参)时,总共有多少种投骰子的方法. 输入描述: 输入包括一个整数n,(1 ≤ n ≤ 6) 输出描述: 输出一个整数,表示投骰子的方法 思路:递归的思路.n=1时,有1种方法:n=2时,有2种方法:n=3时,有4种方法,在当前n步时应该有前n-1步的方法数加上当前直接投n的方法.即f(n)=f(n-1)+f(n-2)+...+f(

2019秋招笔试编程题 膨胀的牛牛

题目描述: 牛牛以草料为食.牛牛有一天依次遇到n堆被施展了魔法的草料,牛牛只要遇到一堆跟他当前相同大小的草料,它就会把草料吃完,而使自己的大小膨胀一倍.一开始牛牛的大小的是A,然后给出牛牛依次遇到的n堆草料的大小.请计算牛牛最后的大小. 输入描述: 输入包括两行,第一行包含两个整数n和A(1 ≤ n ≤ 200, 1 ≤ A ≤ 1,000,000,000)第二行包括n个整数,表示牛牛依次遇到的草料堆大小a_i(1 ≤ a_i ≤ 1,000,000,000) 输出描述: 输出一个整数,表示牛牛

腾讯2016校招编程题【PHP实现】

2016腾讯春招的编程题 话不多说,直接上题!!! 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串.如何删除才能使得回文串最长呢?输出需要删除的字符个数 . 这道题是以回文为载体,考察两个字符间的最大子串,最大子串算法在表示字符串的关联度上用途很广泛. 而遮到题就是字符串的长度减去其和翻转字符串的长度的最大子串即可.最长子串的算法我一开始也是蒙的.这完全没没思路呀. 后来看到一篇blog,才明白最长子串,好的,最后我们形成代码 代码实现: function solution

好未来2017秋招笔试真题二 --牛客网

好未来2017秋招笔试真题二 --牛客网 链接:https://www.nowcoder.com/questionTerminal/ee5de2e7c45a46a090c1ced2fdc62355来源:牛客网 将一句话的单词进行倒置,标点不倒置.比如 I like beijing. 经过函数后变为:beijing. like I 输入描述: 每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100 输出描述: 依次输出倒置之后的字符串,以空格分割 输入例子: I

2017网易秋招编程集合

CPP http://blog.csdn.net/achiberx/article/details/74058208 [编程题]回文序列 如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列.例如:{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列.现在给出一个数字序列,允许使用一种转换操作:选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数

微软校招编程题&quot;Beautiful String&quot;的状态机解法

昨天碰巧看到一道微软校招的编程题,题目大意如下: 如果一个字符串包括三组或者更多组的连续升序字母,每组长度相等,那么我们就称这个字符串是Beautiful String 如下是一些Beautiful String的例子: abc.cde.aabbcc.aaabbbccc 这些不是Beautiful String: abd.cba.aabbc.zab 输入一个只含有小写字母的字符串,如果它含有一个Beautiful的子串,就输出YES,否则输出NO 输入: 第一行是案例个数,之后的每一行是一个数字

19届第四范式测试开发工程师校招-编程题

编程题两道,第一道关于SQL的联合查询跟第二排序,第二道关于二维数组. 题目2: 给定一个空的int类型的二维数组array[n][m].按下面的填充规则,请编写一个函数将此二维数组填满并打印出来. 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 16 输入描述:输入的包括两个正整数,表示二维数组的大小n,m(1<=n,m<=10) 输出描述:打印结果,每行行末无空格. 例1:输入为4 4 输出为 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15

2017年中兴武汉秋招在线编程第二题

题目描述: 给出一个只由0和1组成的二进制字符串S,写一个算法来找出:得到只由1组成的最长连续字段的不同方法数目.你可以将K个0改为1. 请注意,如果生成的字符串相同,则视两种方式为同一种方式. 输入: 该函数方法的输入包括三个参数-- size ,表示二进制字符串大小的整数 allowedChanges,表示允许的更改次数的整数(K) str 表示二进制字符串S 输出: 返回一个整数,表示得到由1组成的最长连续字段的不同方法数目. 约束条件:1<= size<=2*10^5