所以我正在解决一个小背包,但是有错误排序操作

问题描述

#include<iostream>
#include <bits/stdc++.h>
using namespace std;
class knapsack
{
public:
    int profit[4]={280,100,120,120};
    int weight[4]={40,10,20,24};
    int total=60;
    float fraction[];
    int fractotal=0;
    int profittotal=0;
    int getprofit=0;
    float temp[4]={0,0};
    float temp1=0;
    float temp2=0;
    float temp3=0;
    float temp4=0;
void displayvalues()
{
    int i;
    cout<<"The profit and weight of the item"<<"\n";
    cout<<"The Profit"<<"  ";
    for(i=0;i<4;i++)
    {
        cout<<profit[i]<<" ";
    }
    cout<<"\n"<<"The weights"<<"  ";
    for(i=0;i<4;i++)
    {
        cout<<weight[i]<<" ";
    }
}
float fractionalknapsack()
{
    int i,j;
    for(i=0;i<4;i++)
    {
        fraction[i]=profit[i]/weight[i];
    }
    cout<<"\n"<<"The values are"<<"\n";
    for(i=0;i<4;i++)
    {
        profittotal=profittotal+profit[i];
    }
    for(i=0;i<4;i++)
    {
        cout<<fraction[i]<<"\n";
        fractotal= fractotal+fraction[i];
    }
    if(fractotal<=total)
    {
        cout<<"The maximum possible value is"<<profittotal;
    }
    else if(fractotal>=total)
    {
        for(i=0;i<4;i++)
        {
            for(j=i+1;j<4;j++)
            {
                if(fraction[i]<fraction[j])
                {
                    temp2=fraction[i];
                    fraction[i]=fraction[j];
                    fraction[j]=temp2;
                    temp3=profit[i];
                    profit[i]=profit[j];
                    profit[j]=temp2;
                    temp4=weight[i];
                    weight[i]=weight[j];
                    weight[j]=temp4;
                }
            }
        }
        for(i=0;i<4;i++)
        {

    while(getprofit<total)
    {
        if(getprofit+weight[i]<=total)
        {
            temp[i]=1;
            getprofit+=weight[i];
        }
        else
        {
            temp[i]=(total-getprofit)/weight[i];
            getprofit=total;
            i+=1;
        }
    }
    cout<<temp;

        }
    }
    for(i=0;i<4;i++)
    {
        temp1+=profit[i]*temp[i];
    }
    cout<<temp1;
}
};
int main()
{
    knapsack k;
    k.displayvalues();
    k.fractionalknapsack();
}

所以在这里,如果您看到我正在用我的方法解决小背包问题,但是排序操作中有错误,那么有人可以给我解决方案。这真的很有帮助。因此,在小数背包功能中,如果下一个值比上一个值大,则我必须进行排序,否则我将使用别的方法,但是我使用了排序操作,但无法正常工作。所以有人可以帮助我。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)