0%

笔试题汇总

记录笔试中写到的编程题

爱奇艺

1 切割块

有一个xyz的立方体,要在这个立方体上砍k刀,每一刀可以看作是用一个平行于立方体某一面的平面切割立方体,且必须在坐标为整数的位置切割,如在x=0.5处用平面切割是非法的。问在切割k刀之后,最多可以把立方体切割成多少块。

1
/** Input: 2 2 2 3    OutPut: 8  **/
2
private static long max_piece(int x, int y, int z, int k) {
3
        long max_p = x * y * z;//最大块数,即体积
4
        long max_k = (x - 1) + (y - 1) + (z - 1);//最大能切的刀数,即每一个边长减1的和
5
        if (k >= max_k) {//大于最大刀数
6
            return max_p;//返回体积
7
        }
8
        //若k小于最大刀数,给边长排序,从小往大切,确保每一边切的刀数要小于该边的边长
9
        int[] arr = {x, y, z};
10
        long a = 1, b = 1, c = 1;
11
        Arrays.sort(arr);
12
        for (int i = 0; i < k;) {
13
            if(a < arr[0] && a == b)   {
14
                a++;i++;
15
            }
16
            else if(c < arr[1] &&  c == b)   {
17
                c++;i++;
18
            }
19
            else if(b < arr[2]) {
20
                b++;i++;
21
            }
22
            else break;
23
        }
24
        max_p = a * b * c;
25
        return max_p;
26
    }
-------------未完待续-------------