7-36 装箱问题
假设有N项物品,大小分别为s 1、s 2 、…、s i 、…、s N,其中si为满足1≤s i≤100的整数。要把这些物品装入到容量为100的一批箱子(序号1-N)中。装箱方法是:对每项物品, 顺序扫描箱子,把该物品放入足以能够容下它的第一个箱子中。请写一个程序模拟这种装箱过程,并输出每个物品所在的箱子序号,以及放置全部物品所需的箱子数目。
输入格式:
输入第一行给出物品个数N(≤1000);第二行给出N个正整数s i(1≤s i ≤100,表示第i项物品的大小)。
输出格式:
按照输入顺序输出每个物品的大小及其所在的箱子序号,每个物品占1行,最后一行输出所需的箱子数目。
#include "bits/stdc++.h"
using namespace std;
int main(){
int n;
cin>>n;
int a[n+1];//物品大小
int b[n+1];//箱子
for(int i=1;i<=n;i++){
cin>>a[i];
b[i]=100;//将所有箱子赋值为100
}
int num=0;//记录需要多少箱子
//每一个物品,遍历所有箱子,找到了空间够的就填进去(已经放过东西的箱子),如果已经填放过东西的箱子都不满足,
//那就开辟一个新的箱子
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i]<=b[j]&&b[j]!=100){
b[j]-=a[i];
cout<<a[i]<<" "<<j<<endl;
break;
}
else if(b[j]==100){
num++;
cout<<a[i]<<" "<<j<<endl;
b[j]-=a[i];
break;
}
}
}
cout<<num;
return 0;
}