记录笔试中写到的编程题
爱奇艺
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 | } |