7-4 装箱问题 (5 分)
一、题
1.描述
假设有N项物品,大小分别为s 1 、s 2 、…、s i、…、s N,其中s i 为满足1≤si≤100的整数。要把这些物品装入到容量为100的一批箱子(序号1-N)中。装箱方法是:对每项物品, 顺序扫描箱子,把该物品放入足以能够容下它的第一个箱子中。请写一个程序模拟这种装箱过程,并输出每个物品所在的箱子序号,以及放置全部物品所需的箱子数目。
输入输出:
二、解
1.过程
1.用数组存储物品,和建立n个箱子,箱子容量100。
2.从第一个物品开始,判断它是否能放在第一个箱子,即箱子容量是否足够,若可以,就存入该箱子下标,并且箱子容量减小(容量-该物品的大小);若不可以,再从二个箱子判断…直到所有物品判断完。及时输出。
3.输出该过程使用了的箱子的个数,并输出。
2.代码
c代码如下:
#include<stdio.h>
int main()
{
int N;
scanf("%d",&N);
int a[N+1];// 物品
for(int i=1; i<=N; i++)
scanf("%d",&a[i]);
int b[N+1];//箱子
for(int i=1; i<=N; i++)
b[i]=100;
int max=1;//记录箱子数目
for(int i=1; i<=N; i++)
{
for(int j=1; j<=max; j++)
{
if(b[j]>=a[i])
{
printf("%d %d\n",a[i],j);
b[j]-=a[i];
break;
}
else
{
if(j==max)
{
max++;
b[max]-=a[i];
printf("%d %d\n",a[i],max);
break;
}
}
}
}
printf("%d",max);
}