您的位置:首页 > 其它

百练1017:装箱问题

2016-03-05 14:33 267 查看
总时间限制: 1000ms 内存限制: 65536kB

描述

一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常使用一个 6*6*h 的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。现在这个程序由你来设计。

输入

输入文件包括几行,每一行代表一个订单。每个订单里的一行包括六个整数,中间用空格隔开,分别为1*1至6*6这六种产品的数量。输入文件将以6个0组成的一行结尾。

输出

除了输入的最后一行6个0以外,输入文件里每一行对应着输出文件的一行,每一行输出一个整数代表对应的订单所需的最小包裹数。

样例输入

0 0 4 0 0 1

7 5 1 0 0 0

0 0 0 0 0 0

样例输出

2

1

来源

Central Europe 1996

代码如下:

#include<stdio.h>
int main(){//代码源于《程序设计导引及在线实践》
int a,b,c,d,e,f;//a-f对应1*1到6*6的箱子
int u[]={0,5,3,1};//装3*3类箱子不满时可以装2*2类箱子的4种情形
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;
int x,y;//x代表用于装2*2类箱子的空位,y代表用于装1类箱子的空位
int N=0;//总共所需要的包装的数量
N=f+e+d+(c+3)/4;//统计3*3-6*6类箱子所需要的包装数
x=5*d+u[c%4];//统计4类箱子和3类箱子留给2类箱子的空位
if(b >x){
N+=(b-x+8)/9;//统计算上遗留空位2*2类箱子所占的包装数量
}
y=N*36-f*36-e*25-d*16-c*9-b*4;//遗留给1*1类箱子的空位
if(a >y){
N+=(a-y+35)/36;
}
printf("%d\n", N);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 上机 c