林品逸
(hyacinth_lpy)
1
装箱问题
约定:所有数据范围均在int类型内。
一个工厂制造的产品形状都是长方体,他们的高度都是h,长和宽都相等,一共有6个型号,他们的长宽尺寸表示分别为 11,22,33,44,55,66。这些产品通常要使用一个66h的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂想要减小每个订单运送时的包裹数量。需要你编写一个程序帮他们解决这个问题。
输入:包括几行,每一行代表一个订单。每个订单里包括6个整数,分别表示11到66这6种产品的数量。输入6个0表示结束。
输出:每行输出一个整数,对应订单所需的最小包裹数。
样例输入:
0 0 4 0 0 1
7 5 1 0 0 0
0 0 0 0 0 0
样例输出:
2
1
2 个赞
陈晟亦
(弈剑のㄨ听雨阁)
3
while(1){
cnt=0;
scanf("%d%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5,&a6);
if(a1==0&&a2==0&&a3==0&&a4==0&&a5==0&&a6==0)
break;
cnt+=a6+a5+a4+(a3+3)/4; //a6和a5和a4以及(a3+3)/4都分别占用一个箱子,(a3+3)/4是对a3每满4向上取整的个数
x=5*a4+c[a3%4]; //这是计算2×2空位子的总个数,每一个a4装的箱子都有着5个2×2的空位子+每一个a3装的箱子可能存在2×2的空位子数量
if(a2>x) { //计算a2的数量是否大于其空位子的数量
cnt += (a2 - x + 8) / 9; //计算a2填满空位子后剩余的a2所需要的箱子的个数。(a2-x+8)/9是对a2每满9向上取整的箱子个数
}
y=36*cnt-36*a6-25*a5-16*a4-9*a3-4*a2; //计算剩余1×1空位子的个数
if(a1>y) {//计算a1的数量是否大于其空位子的数量
cnt += (a1 - y + 35) / 36;//计算a1填满空位子后剩余的a1所需要的箱子的个数.(a1-y+35)/36是对a1每满36向上取整的箱子个数
}
printf("%d\n",cnt);
}
1 个赞
林品逸
(hyacinth_lpy)
5
已经解决啦
#include<bits/stdc++.h>
using namespace std;
int n=6,ans,a[1010101],b[4]={0,5,3,1},temp;
int main()
{
while(true)
{
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
if(a[1]==0 && a[2]==0 && a[3]==0 && a[4]==0 && a[5]==0 && a[6]==0)return 0;
ans=a[6]+a[5]+a[4]+ceil(a[3]/4.0);
temp=a[2];
temp=temp-(a[4]*5+b[a[3]%4]);
if(temp>0)ans+=ceil(temp/9.0);
a[1]=a[1]-(ans*36-a[6]*36-a[5]*25-a[4]*16-a[3]*9-a[2]*4);
if(a[1]>0)ans+=ceil(a[1]/36.0);
cout<<ans<<endl;
}
return 0;
}