请问这道“装箱问题”如何思考呢?我看代码不是很理解,希望大家提供一下详细思路,非常感谢大家!
#include <cstdio>
int main()
{
int n, a, b, c, d, e, f, x, y;
//n表示需要的箱子
//x表示1×1的空位数目
//y表示2×2的空位数目
int u[4] = { 0,5,3,1 }
//表示3×3产品分别是4k,4k+1,4k+2,4k+3时
while (scanf("%d%d%d%d%d%d", &a, &b, &c, &d, &e, &f) != EOF)
{
if (a == 0 && b == 0 && c == 0 && d == 0 && e == 0 && f == 0)
break;
n = f + e + d + (c + 3) / 4;
y = 5 * d + u[c % 4];
//长宽大于或等于3×3的产品所占的新箱子数目
if (b > y)
n += (b - y + 8) / 9;//多出来的2×2箱子应该占用的新箱子数
x = 36 * n - 36 * f - 25 * e - 16 * d - 9 * c - 4 * b
//所有箱子剩下的1×1空格
if (a > x)
n += (a - x + 35) / 36;
printf("%d\n", n);
}
return 0;
}