最优装载问题

#include<iostream>
using namespace std;
struct box{
    int number;
    int weight;
};
void Sort(int n,struct box *w)
{
    for(int i=0;i<n;i++)
    {
        for(int j=i;j<n;j++)
        {
            if(w[i].weight>w[j].weight)
            {
                struct box t=w[i];
                w[i]=w[j];
                w[j]=t;
            }
        }
    }
}
void Print(int n,struct box w[])
{
    for(int i=0;i<n;i++)
    {
        cout<<w[i].number<<" "<<w[i].weight<<endl;
    }
}
int Loading(int n,struct box w[],bool a[],int weight)
{
    int count0=0;
    for(int i=0;i<n;i++)
    {
        if(weight>=w[i].weight)
        {
            weight-=w[i].weight;
            a[w[i].number]=true;
            count0++;
        }
    }
    return count0;
}
int main()
{
    int n;cout<<"箱子个数:";
    cin>>n;
    int weight;cout<<"重量限制:";
    cin>>weight;
    struct box w[n];
    cout<<"n个箱子的重量:";
    for(int i=0;i<n;i++)
    {
        w[i].number=i+1;
        cin>>w[i].weight;
    }
    cout<<"将n个箱子按重量从小到大排序:"<<endl;
    Sort(n,w);
    Print(n,w);
    bool a[n];
    for(int i=0;i<n;i++)
        a[i]=false;
    cout<<"可装入个数:";
    cout<<Loading(n,w,a,weight)<<endl;
    cout<<"装入的序号:";
    for(int i=0;i<n;i++)
    {
        if(a[i]==true)
            cout<<i<<" ";
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值