搜狐校招第二题思路附原题


设各种包装的数量分别为n6、n5、n4、n3、n2、n1,需要的包装盒总数ans

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总占用的数量)

全部评论
5*5应该对应91个1*1吧
点赞 回复 分享
发布于 2017-08-29 06:47
我博客里写了,地址bestmind.space,看看和你的相同不
点赞 回复 分享
发布于 2017-08-29 02:31
不知道对不对,明天醒了敲一遍试试
点赞 回复 分享
发布于 2017-08-29 00:28

相关推荐

不愿透露姓名的神秘牛友
昨天 12:11
点赞 评论 收藏
分享
自学java狠狠赚一...:骗你点star的,港卵公司,记得把star收回去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务