《数据结构学习与实验指导》2-9:装箱问题模拟

来源:互联网 发布:开淘宝店挣钱么 编辑:程序博客网 时间:2024/06/05 02:10

实验内容:假设有N项物品,大小分别为s1,s2,……,sN,其中si为1<=si<=100的整数。要吧这些物品放入容量为100的一批箱子中。装箱方法是:对每项物品,顺序扫描箱子,把该物品放入足以能容下他的第一个箱子中。
输入说明:输入第1行给出物品个数N(N<=1000),第2行给出N个正整数si(1<=si<=100)。
输出说明:按输入顺序输出每个物品的大小及其所在的箱子序号,每个物品占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

6
100 90 80 70 60 50 | 100 1
90 2
80 3
70 4
60 5
50 6
6

1
2 | 2 1
1

#include <stdio.h>#include <stdlib.h>int main() {    int N;    scanf("%d", &N);    int *goods = (int *) malloc(N * sizeof(int));    int *position = (int *) malloc(N * sizeof(int));    int *barrel = (int *) malloc(N * sizeof(int));    for (int i = 0; i < N; i++) {        scanf("%d", goods + i);        position[i] = -1;        barrel[i] = 100;    }    for (int i = 0; i < N; i++) {        int j = 0;        while (barrel[j] < goods[i]) {            j++;        }        barrel[j] -= goods[i];        *(position + i) = j;    }    for (int i = 0; i < N; i++) {        printf("%d %d\n", goods[i], position[i] + 1);    }    int count = 0;    while (barrel[count] < 100) {        count ++;    }    printf("%d\n", count);    return 0;}
阅读全文
0 0
原创粉丝点击