实验7-1-13 装箱问题(20 分) 假设有N项物品,大小分别为s1、s2、…、si、…、sN,其中si为满足1≤si≤100的整数。 要把这些物品装入到容量为100的一批箱子(序号1-N)中。装箱方法是:对每项物品, 顺序扫描箱子, 把该物品放入足以能够容下它的第一个箱子中。请写一个程序模拟这种装箱过程, 并输出每个物品所在的箱子序号,以及放置全部物品所需的箱子数目。 输入格式: 输入第一行给出物品个数N(≤1000);第二行给出N个正整数si(1≤si≤100,表示第i项物品的大小)。 输出格式: 按照输入顺序输出每个物品的大小及其所在的箱子序号,每个物品占1行,最后一行输出所需的箱子数目。 输入样例: 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 <string.h> #include <math.h> #include <stdlib.h> #include <ctype.h> #define N 1000 //时间:2018年4月20日09:57:19 //思路:关键是确定每一个数组元素(物品)放入哪个箱子(容器)中?从第2个物品开始, // 循环n-1次,检测这n-1个物品,与前面物品之和是否满足其和小于箱子的容量,如果小于100,则找到其应该放在箱子的位置。 int main() { int n, i, j, flag, max; int s[N]; //输入数据 int d[N]; //临时数组(用于动态处理箱子中的物品) int pos[N]; scanf("%d", &n); for (i = 0; i<N; i++) { pos[i] = -1; } for (i = 0; i<n; i++) { scanf("%d", &s[i]); d[i] = s[i]; } pos[0] = 0; //初始化第一个箱子的编号为0 for (i = 1; i<n; i++) { for (j = 0; j<i; j++) { flag = 0; //在第二个循环中更新flag if (d[i] + d[j] <= 100) //寻找相同的容器 { d[j] = d[j] + d[i]; d[i] = 0; pos[i] = j; //记录d[i]中第i个元素放入的容器的编号 flag = 1; break; } } if (flag == 0) { pos[i] = i; } } max = 0; for (i = 0; i<n; i++) { if (pos[i]>max) max = pos[i]; } for (i = 0; i<n; i++) { printf("%d %d\n", s[i], pos[i] + 1); } printf("%d\n", max + 1); return 0; }
实验7-1-13 装箱问题(20 分)
猜你喜欢
转载自blog.csdn.net/aa11224488/article/details/80014771
今日推荐
周排行