搜狐校招第二题思路附原题
6*6(36)直接加到总数里
5*5(25)可以用11个1*1填充
因此这里需要的包装盒总数ans += n5
每有一个n5就需要n1 – 11,如果n1减为负数,不需要理会,没有能替代n1的
剩余的n1数量为n1 – 11 * n5
4*4(16)
5个2*2填充
这里需要的包装盒总数ans += n4
每有一个n4优先用2*2填充那么剩余的n2数量为n2 – 5 * n4
这里需要关注一下n2的值,这里即便n2减成负的了也不影响计算,用n1填充n2的负值(就是把n2没填满的部分用n1填上),到最后n2、n1都为负的话就表示n2、n1已经全部用来填充
所以n1的数量为n1 – 4*(n2的绝对值),这步可以放到最后
3*3(9)四个为一组,多出来的填充
这里需要的ans += (n3 / 4的商)
下面是三种情况,判断一下然后根据条件执行
3个3*3
1个2*2 + 5个1*1填充
这里需要的ans++
每有一个n3优先用2*2填充那么剩余的n2数量为n2 – 1 * n3
2个3*3
3个2*2 + 6个1*1填充
这里需要的ans++
每有一个n3优先用2*2填充那么剩余的n2数量为n2 – 3 * n3
1个3*3
5个2*2 + 7个1*1填充
这里需要的ans++
每有一个n3优先用2*2填充那么剩余的n2数量为n2 – 5* n3
2*2
1*1
最后根据条件得出n2的数量,然后计算n1的数量为n1 – 4*(n2的绝对值),然后求得2*2的个数与1*1的个数算出4*n2 + 1*n1,如果>36的话就ans加需要包装的数量,如果36>?>0的话就ans+1
n2 = n2 – (3*3无法凑成一组的盒子的数量) * n3
如果n2为正那么n1 = n1 – 11 * n5,反之n1 = n1 – 11 * n5 – 4*(n2的绝对值)
最终得出结果:
ans = n6 + n5 + n4 + (n3 / 4的商) + 1 + (n2和n1总占用的数量)