装箱问题1代码:
#include <iostream>
using namespace std;
int main()
{int a,b,c,d,e,f;while (true){int N = 0; // 计算需要的包裹数cin>>a>>b>>c>>d>>e>>f;if (a==0&&b==0&&c==0&&d==0&&e==0&&f==0)break;N = f+e+d+(c+3)/4;// 从6开始,计算最少需要的箱子数int y=5*d; // y:计算可存放2*2货物的空隙个数if (c%4==1) y+=5;else if (c%4==2) y+=3;else if (c%4==3) y+=1;if (b>y) // 如果2*2预留位不够再加包裹{ N += (b-y+8)/9;}int x = 36*N-36*f-25*e-16*d-9*c-4*b;// x计算可存放1*1箱子的个数if (a>x){N += (a-x+35)/36;}cout<<N<<endl;}
}
装箱问题2代码:
#include<iostream>
using namespace std;
struct th
{int weight;//物品的重量int index=0;//物品所在箱子序号,为0时表示未放入箱子
}thing[1000];//结构体数组
int main()
{int N;//物品个数、箱子个数int box[1000];//各个箱子的剩余容量int num=0;//所需箱子的个数int i,j;cin>>N;for(i=1;i<=N;i++)cin>>thing[i].weight;/*for(i=1;i<=N;i++)cout<<weight[i]<<" ";*/for(i=1;i<=N;i++)//初始化箱子容量box[i]=100;for(i=1;i<=N;i++)//遍历所有的物品,找到对应的箱子{int index_box;//用于存储找到的箱子序号for(j=1;j<=N;j++)//遍历所有的箱子{if(box[j]>=thing[i].weight)//当找到合适的箱子时{index_box = j;//记录编号box[j]-=thing[i].weight;//将物品放入箱子break;}}thing[i].index=index_box;//标记该物品对应的箱子编号}for(i=1;i<=N;i++)//显示所有物品及其箱子编号cout<<thing[i].weight<<" "<<thing[i].index<<endl;for(i=1;i<=N;i++)//统计使用过的箱子数目{if(box[i]!=100)num++;}cout<<num<<endl;//输出使用的箱子总数return 0;
}