7-3 装箱问题 (10分)
#include <stdio.h>
int main()
{
int a[1000],n,i=0,c[1000],b[1000]={0},j,m=0;
scanf("%d",&n);
for(i=0;i<n;i++)scanf("%d",&a[i]);
for(i=0;i<n;i++)c[i]=a[i];
for(i=0;i<n;i++)
{
if(a[i]==0)continue;
// 如果这个位置没有物品,为0,那么跳过
m++;
// 箱子数加1,拿出一个箱子
b[i]=m;
for(j=i+1;j<n;j++)
{
if(a[j]==0)continue;
b[i]=m;
if(a[i]+a[j]<=100)
{
b[j]=b[i];
// 在同一个箱子里,序号一致
a[i]=a[i]+a[j];
// 这个物品和上个物品装在一起
a[j]=0;
// 因为这个物品被装进箱子,那么这个位置没有物品,赋0
}
}
a[i]=0;
// 因为这个物品被装进箱子,那么这个位置没有物品,为0
}
for(i=0;i<n;i++)printf("%d %d\n",c[i],b[i]);
printf("%d",m);
return 0;
}