#include<iostream>
#include<cmath>
using namespace std;
struct G
{
float W;
float V;
char N[10];
}g[100];
void wenzi(int & m)
{
cout<<"某婚礼需要一个珠宝盒"<<endl;
cout<<"要求该珠宝盒所装的珠宝重量和不能超过50g,且珠宝盒中只能装3件珠宝,但在满足重量,数量要求的范围内,珠宝的价值和要最大"<<endl;
cout<<"问:该怎么合理的装珠宝于珠宝盒中????"<<endl<<endl;
cout<<"亲:现有多少种类的珠宝呢?请输入:"<<endl;
cin>>m;
}
int main()
{
int M;
wenzi(M);
int i,j,k,p=0,A[100],B[100],C[100],a,b,c;
int w[100],v,max=0;
for(i=1;i<=M;i++)
{
cout<<"第"<<i<<"类商品的名称、重量、价值 :";
cin>>g[i].N>>g[i].W>>g[i].V;
}
for(i=1;i<=M;i++)//第一次取有三种情况
{
for(j=1;j<=M;j++)//第二次取有三种情况
{
for(k=1;k<=M;k++)//第三次取有三种情况
{
p++;
w[p]=g[i].W+g[j].W+g[k].W;//每种情况的重量和
if(w[p]<50)//若重量和小于50,将每一次取的珠宝类型记录
{
A[p]=i;B[p]=j;C[p]=k;
}
//反之,用0初始化
else
{
A[p]=0;B[p]=0;C[p]=0;
}
}
}
}
//在满足上述条件的前提下计算珠宝的价值和
for(p=1;p<=pow(M,3);p++)
{
v=g[A[p]].V+g[B[p]].V+g[C[p]].V;
//并取出最大值
max=(v>max)?v:max;
}
//将满足条件的各种取法记录
for(p=1;p<=pow(M,3);p++)
{
v=g[A[p]].V+g[B[p]].V+g[C[p]].V;
if(max==v)
{
a=A[p];
b=B[p];
c=C[p];
}
}
//将结果罗列
cout<<"满足要求的取法是:"<<endl;
if(a==b&&a!=c)
{
cout<<"取2件"<<g[a].N<<endl;
cout<<"取1件"<<g[c].N<<endl;
cout<<"重量和:"<<g[a].W*2+g[c].W<<"克"<<endl;
cout<<"价值和:"<<g[a].V*2+g[c].V<<"元"<<endl;
}
if(a==c&&a!=b)
{
cout<<"取2件"<<g[a].N<<endl;
cout<<"取1件"<<g[b].N<<endl;
cout<<"重量和:"<<g[a].W*2+g[b].W<<"克"<<endl;
cout<<"价值和:"<<g[a].V*2+g[b].V<<"元"<<endl;
}
if(c==b&&c!=a)
{
cout<<"取2件"<<g[c].N<<endl;
cout<<"取1件"<<g[a].N<<endl;
cout<<"重量和:"<<g[c].W*2+g[a].W<<"克"<<endl;
cout<<"价值和:"<<g[c].V*2+g[a].V<<"元"<<endl;
}
if(a==b&&a==c)
{
cout<<"取3件"<<g[a].N<<endl;
cout<<"重量和:"<<g[a].W*3<<"克"<<endl;
cout<<"价值和:"<<g[a].V*3<<"元"<<endl;
}
return 0;
}