lithium的包裹
时间限制(普通/Java) :
1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 39 测试通过 : 15
总提交 : 39 测试通过 : 15
比赛描述
新的学期就要开始了,lithium同学也准备收拾行李从家里出发,但是他在将东西打包的时候遇到了一个问题。lithium一共有6种大小不同的行李,这些行李的高度相同且从上往下看都是正方形的,它们的大小分别为1*1,2*2,3*3,4*4,5*5,6*6。
lithium现在有足够多的6*6大小的盒子(高度与行李相同),他想写一个程序算出最少要用几个盒子才能装下所有的东西。但是lithium同学因为打了一个假期的游戏,现在已经完全不会编程了,所以现在他只好求助于你来解决这个问题。
输入
输入将包含多组数据,每组数据占一行。一组数据中有六个数,分别代表大小从1*1到6*6的行李的数量。输入结束的标志是一组六个数全为“0”的数据。
输出
针对每一组输入数据输出lithium所需要的最少盒子数,对于最后一组“全零”样例不要输出结果。
样例输入
0 0 4 0 0 1
7 5 1 0 0 0
0 0 0 0 0 0
样例输出
2
1
题目来源
NUPT
#include<iostream>
using namespace std;
int main(){
int n1,n2,n3,n4,n5,n6,box;
int space1,space2;
while(cin>>n1>>n2>>n3>>n4>>n5>>n6 &&
(n1||n2||n3||n4||n5||n6) ){
box = n6;
space1 = space2 = 0;
while(n5){
n5--;
box++;
space1 += 11;
}
while(n4){
n4--;
box++;
space2 += 5;
}
while(n3>=4){
n3 -= 4;
box++;
}
if(n3==3){
box++;
space2 += 1;
space1 += 5;
n3 = 0;
}else if(n3==2){
box++;
space2 += 3;
space1 += 6;
n3 = 0;
}else if(n3==1){
box++;
space2 += 5;
space1 += 7;
n3 = 0;
}
if(n2 <= space2){
space2 -= n2;
n1 += space2*4;
n2 = 0;
}else{
n2 -= space2;
space2 = 0;
while(n2>=9){
box += 1;
n2 -= 9;
}
if(n2>0){
box += 1;
space1 += 36 -n2*4;
n2 = 0;
}
}
if(n1<=space1){
space1 -= n1;
n1 = 0;
}else{
n1 -= space1;
space1 = 0;
while(n1>=36){
n1 -= 36;
box ++;
}
if(n1){
box++;
n1 = 0;
}
}
cout<<box<<endl;
}
}