编辑代码

#include <iostream>
using namespace std;
//按照单位重量的价值量大小降序排列
void Sort(int n,float *w,float *v)
{
    int i,j;
    float temp1,temp2;
    for(i=1;i<=n;i++)
    for(j=1;j<=n-i;j++)//冒泡排序
    {
        temp1=v[j]/w[j];
        temp2=v[j+1]/w[j+1];
        if(temp1<temp2)
        {
            swap(w[j],w[j+1]);
            swap(v[j],v[j+1]);
        }
    }
}
int main()
{
    float w[101];//用来表示每种货物的重量
    float v[101];//用来表示每种货物的价值量
    float x[101];//表示最后放入背包的比例
    int n,s;//货物数,实际货物总重量
    float M;//背包最大容纳重量
    printf("请输入货物数n和背包最大容量M:");
    cin>>n>>M;
    //依次输入每种货物的重量和价值量
    for(int i=1;i<=n;i++)
    {
        printf("请输入第%d种货物的重量w和价值v:",i);
        cin>>w[i]>>v[i];
        s=s+w[i];
    }
    if(s<=M) 
    {
        //输出
        for(int i=1;i<=n;i++)
        {
            cout<<"重量为"<<w[i]<<",价值量为"<<v[i]<<"的货物"<<"放入的比例为:1"<<endl;
        }
        return 0;
    }
    //按照单位重量的价值量大小降序排列
    Sort(n,w,v);
    int i;
    for(i=1;i<=n;i++)
        x[i]=0;//初始值,未装入背包,x[i]=0
    float c=M;//更新背包容纳量
    for(i=1;i<=n;i++)
    {
        if(c<w[i])  break;//不能完全装下
        x[i]=1;
        c=c-w[i];
    }
    if(i<=n)
        x[i]=c/w[i];
    //输出
    for(int i=1;i<=n;i++)
        cout<<"重量为"<<w[i]<<",价值量为"<<v[i]<<"的货物"<<"放入的比例为:"<<x[i]<<endl;
    return 0;
}