源代码:
#include <iostream>
#define BACKSIZE 50.0
using namespace std;
struct node
{
float weight;
float value;
float average_value;
int index;
};
int main()
{
int n;
cout << "请输入物体的数量:" << endl;
cin >> n;
node * o = new node [n];
for (int i = 0; i < n; i++)
{
float w, v;
cout << "请输入第" << i + 1 << "个物品的重量:" << endl;
cin >> w;
cout << "请输入第" << i + 1 << "个物品的价值:" << endl;
cin >> v;
o[i].weight = w;
o[i].value = v;
o[i].average_value = v / w;
o[i].index = i + 1;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n - i; j++)
{
if (o[j].average_value < o[j + 1].average_value)
{
float tempw = o[j].weight;
o[j].weight = o[j + 1].weight;
o[j + 1].weight = tempw;
float tempav =o[j].average_value;
o[j].average_value = o[j + 1].average_value;
o[j + 1].average_value = tempav;
float tempi = o[j].index;
o[j].index = o[j + 1].index;
o[j + 1].index = tempi;
}
}
}
float total = 0.0;
int mark;
for (int i = 0; i < n; i++)
{
total += o[i].weight;
if (total <= BACKSIZE)
{
mark = i + 1;
}
}
cout << "背包可以放下以下几个物体:" << endl;
for (int i = 0; i < mark; i++)
{
cout << "第" << o[i].index << "个物体" << endl;
}
delete [] o;
return 0;
}
运行结果截图: