Description
一个工厂制造的产品都是高度为h,长和宽相等的长方体,一共有六个型号,他们的长宽分别为 1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常使用一个6*6*h的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。
Input
输入文件每一行代表一个订单。每个订单里的一行包括六个整数,分别为 1*1 至6*6 这六种产品的数量。输入文件将以 6 个0 组成的一行结尾。
Output
除了输入的最后一行6 个0 以外,输入文件里每一行对应着输出文件的一行,每一行输出一个整数代表对应的订单所需的最小包裹数。
Sample Input
0 0 4 0 0 1
7 5 1 0 0 0
0 0 0 0 0 0
Sample Output
2
1
题解:
整理ing
AC_Code(cpp):
#include<iostream>
using namespace std;
bool over(int a[])
{
for (int i = 1; i < 7; i++)
{
if (a[i] != 0)
return false;
}
return true;
}
int a[7];
int b[7] = { 0 };
int main()
{
while (1)
{
for (int i = 1; i < 7; i++)
{
cin >> a[i];
}
if (over(a))
break;
int s=0,t=0,ans=0;
for (int i = 6; i >3; i--)
{
ans += a[i];
b[6 - i] = a[i];
}
ans += a[3] / 4;
if (a[3] % 4 != 0)
{
ans++;
b[3] = a[3] % 4;
if (b[3] == 1)
{
t = 7;
s = 5;
}
else if (b[3] == 2)
{
t = 6;
s = 3;
}
else
{
t = 5;
s = 1;
}
}
s += b[2] * 5;
s=s - a[2];
if (s < 0)
{
s = -s;
ans += s / 9;
s = s % 9;
if (s!=0)
{
ans++;
s = 9 - s;
}
}
s = s * 4 + b[1] * 11 + t;
if (s < a[1])
{
s = a[1] - s;
ans += s / 36;
if (s % 36 != 0)
{
ans += 1;
}
}
cout << ans << endl;
}
return 0;
}