装箱子(C++) 难度:初阶

题目描述
小T暑假去叔叔的工厂体验生活。这天一共有N样物品需要小T把它们装入容量为S的一批箱子(共N个,从左到右依次编号1~N)中。

装箱的要求是:对每样物品,从左到右找到第一个可以还能够装下它的箱子中。

请模拟该装箱过程,并记录每件物品被放在了哪个箱子中。

输入格式
第一行两个正整数N和S。

第二行给出N个正整数Si,表示第i样物品的体积大小。

输出格式
一行N个整数,依次表示每件物品所在的箱子编号,空格隔开。

img

定义一个长度为N的数组,数组元素最大值为S。然后将N个 Si分别放到从0开始编号的箱子,如果箱子的当前空闲值大于Si,则放入,并减去Si值

#include <iostream>
using namespace std;
int main()
{
    int N,S,box[200],i,t[200];
    cin>>N>>S;
    for(i=0;i<N;i++)
        box[i] = S;
    for(i=0;i<N;i++)
        cin>>t[i];
    for(i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            if(t[i] <= box[j])
            {
                box[j] -= t[i];
                cout<<j+1<<" ";
                break;
            }
        }
    }
    return 0;
}

用一个数组记录每个箱子的剩余容量,对每个物品遍历所有箱子,判断箱子的剩余容量是否大于等于物体体积。
代码中有详细注释。
运行结果:

img

代码:

#include <iostream>
using namespace std;

int main()
{
    int N, S;
    int Si[201]; //存储每个物体 的大小
    int Li[201]; //存储剩余容量
    cin >> N >> S;
    for (int i = 0; i < N; i++)
    {
        cin >> Si[i];
        Li[i] = S; //初始化剩余容量
    }
    //开始放入箱子
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            if (Li[j] >= Si[i])
            {
                Li[j] -= Si[i]; //放入箱子,修改剩余容量
                cout << j+1; //输出箱子编号
                break;
            }
        }
        if (i < N - 1)
            cout << " ";
        else
            cout << endl;
    }
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632