🔥前言
这道题在刷题过程中也是感觉挺有意思的一道题,思路不复杂,但是解决问题的思路值得学习,下面是代码以及注释(注释中有详细代码解释)
实验7-1-11 装箱问题
输入样例:
8
60 70 80 90 30 40 10 20
输出样例:
60 1
70 2
80 3
90 4
30 1
40 5
10 1
20 2
5
代码以及解析
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n; //货品个数
scanf("%d",&n);
int xsum =0; //所需箱子个数
int s[1000]; //存放物品的数组
int box[1000]; //存放箱子的数组
for(int i =0;i<n;i++){
scanf("%d",&s[i]);
box[i] = 100; //初始箱子容量为100
}
for(int i=0;i<n;i++){ //对每一个货品进行分析
for(int j=0;j<n;j++){ //对相应货品需要的箱子进行分析
if(box[j] - s[i]>=0){ //箱子的容量能够容纳货品
box[j] = box[j]-s[i]; //相应的箱子剩余的存储量
printf("%d %d\n",s[i],j+1); //打印出来物品大小以及需要箱子的标号
if(xsum<j+1){ //所需箱子个数只要小于箱子的正常标号证明本箱子进入到箱子计数
xsum = j+1;
}
break; //第一个箱子已经装好
}
}
}
printf("%d\n",xsum);
return 0;
}