一个工厂把产品包装在正方形的箱子里,尺寸有1×1,2×2,3×3,4×4,5×5,6×6六种,高度为h。产品最终总是捆扎成高度为h的6×6的包裹箱子送到客户手里,因为客户希望包裹箱子越少越好。请你编写一个程序计算最少需要多少只包裹箱子才能把客户买的产品送完。
输入包含多组数据。每组数据有一行,包含6个整数,用空格隔开,分别代表1×1的产品、2×2的产品……6×6的产品的个数。输入6个0时退出。
每组数据输出一行,输出最少需要的包裹箱子数。
0 0 4 0 0 1 7 5 1 0 0 0 0 0 0 0 0 0
2 1
代码:
#include<iostream>
using namespace std;
int nBox[7];
int nBigBox;
void vPack();
int main()
{
int nSum,i;
for(i=1;i<=6;i++)
cin >> nBox[i];
nSum=nBox[6]+nBox[5]+nBox[4]+nBox[3]+nBox[2]+nBox[1];
while(nSum!=0)
{
nBigBox=0;
vPack();
cout << nBigBox << endl;
for(i=1;i<=6;i++)
cin >> nBox[i];
nSum=nBox[6]+nBox[5]+nBox[4]+nBox[3]+nBox[2]+nBox[1];
}
return 0;
}
void vPack()
{
int n1X1=0,n2X2=0;
int nTemp;
nBigBox+=nBox[6];
nBigBox+=nBox[5];
nBigBox+=nBox[4];
n2X2+=nBox[4]*5;
nBigBox+=nBox[3]/4;
nTemp=nBox[3]%4;
if(nTemp>0)
{
nBigBox++;
switch(nTemp)
{
case 1:n2X2+=5;break;
case 2:n2X2+=3;break;
case 3:n2X2+=1;break;
}
}
if(nBox[2]>n2X2)
{
nBigBox+=(nBox[2]-n2X2)/9;
nTemp=(nBox[2]-n2X2)%9;
if(nTemp>0)
{
nBigBox++;
}
}
n1X1=nBigBox*36-nBox[6]*36-nBox[5]*25-nBox[4]*16-nBox[3]*9-nBox[2]*4;
if(nBox[1]>n1X1)
{
nBigBox+=(nBox[1]-n1X1)/36;
nTemp=(nBox[1]-n1X1)%36;
if(nTemp>0)
{
nBigBox++;
}
}
}
void vInput()
{
int i;
for(i=1;i<=6;i++)
{
cin >> nBox[i];
}
}