PTA 实验7-1-11 装箱问题

该程序模拟将大小不一的物品装入容量为100的箱子的过程,按照顺序扫描并分配,输出每个物品的箱子序号及所需箱子总数。物品数量不超过1000,物品大小在1-100之间。代码使用C语言实现,通过遍历比较找到能容纳物品的箱子,并更新箱子状态和计数。
摘要由CSDN通过智能技术生成

假设有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

运行结果:

基本思路: 

1.创建变量N,并接收物品个数N

2.根据题目要求,每个箱子容量是100,每个物品要装到同一个箱子里面,因此创建一个大小为1000(可能每个物品都要一个箱子)元素初始化为零的数组当作箱子,然后每个物品大小加上数组元素大小与比较100,小于或者等于就装到这个箱子里,大于就加到数组下一个元素上,再比较大小,直到把物品装到箱子里

3.按题目要求输出结果,输出物品大小和该物品装到第几个箱子,最后输出用了几个箱子

代码实现:

#include<stdio.h>
#define MAXN 1000
int main() {
    int N = 0;
    scanf("%d", &N);//接收物品个数N
    int s = 0;//每个物品大小
    int box[MAXN] = { 0 };//箱子
    int count = 1;//所需的箱子数目
    for (int i = 0; i < N; i++) {//N项物品装箱
        scanf("%d", &s);//接收物品大小
        int j = 0;
        for (j = 1; j <= N; j++) {//j初始化为1方便输出
            if (box[j] + s <= 100) {//装箱并且比较
                box[j] += s;//装箱
                if (j > count) {//统计所需的箱子
                    count = j;
                }
                break;//物品装箱后,结束该物品装箱过程
            }
        }
        printf("%d %d\n", s, j);//打印结果
    }
    printf("%d", count);//打印结果
    return 0;
}

欢迎提问和纠错,共同讨论一起进步!

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值