7-2 装箱问题 (20 分)
假设有
项物品,大小分别为 、 、…、 、…、 ,其中 为满足 的整数。要把这些物品装入到容量为100的一批箱子(序号1- )中。装箱方法是:对每项物品, 顺序扫描箱子,把该物品放入足以能够容下它的第一个箱子中。请写一个程序模拟这种装箱过程,并输出每个物品所在的箱子序号,以及放置全部物品所需的箱子数目。输入格式:
输入第一行给出物品个数
( );第二行给出 个正整数 ( ,表示第 项物品的大小)。输出格式:
按照输入顺序输出每个物品的大小及其所在的箱子序号,每个物品占1行,最后一行输出所需的箱子数目。
输入样例:
8 60 70 80 90 30 40 10 20
输出样例:
60 1 70 2 80 3 90 4 30 1
#include <iostream> #include<bits/stdc++.h> using namespace std; int a[2000]={0},b[2000]; int main() { int n; cin>>n; int ans[2000]={0}; for(int i=1;i<=n;i++) { int e; cin>>b[i]; e= b[i]; int j =0 ; while(e>0) { j++; int u = 100-a[j]; if(u>=e) { a[j]+=e; e=0; ans[i] = j; } } } int y = 0; for(int i=1;i<=2000;i++) { y++; if(!a[i])break; } for(int i=1;i<=n;i++) { printf("%d %d\n",b[i],ans[i]); } cout<<y-1<<endl; return 0; }