这题没什么规律性,思路很绕,只能边想边动手,最终程序搞完了,思路还是不能很顺的说出,只能给你看代码了
程序代码:main()
{
int a[9],tzmun=0,lrmun=0,tzmax=0,lrmax=0,i1,i2,j1,j2,k1,m; /*a数组标记投资的销售点,tzmun用做垒加每一次投资,lrmun用做垒加利润,tzmax用做保存一种投资方案的总投资额,lrmax用做保存所有投资方案的最大利润*/
int tz[9]={0,200,220,150,180,170,190,180,140}; /*tz数组存放投资金额*/
int lr[9]={0,36,40,50,22,20,30,25,48}; /*lr数组存放利润金额*/
for(i1=1;i1<=2;i1++)
{
tzmun=tz[i1];
lrmun=lr[i1];
for(i2=(i1==1)?2:1;i2>=1;i2--)
{
if(i2==2)
{
tzmun+=tz[i2];
lrmun+=lr[i2];
}
for(j1=4;j1<=5;j1++)
{
tzmun+=tz[j1];
lrmun+=lr[j1];
for(j2=(j1==4)?5:4;j2>=4;j2--)
{
if(j2==5)
{
tzmun+=tz[j2];
lrmun+=lr[j2];
}
for(k1=6;k1<=7;k1++)
{
tzmun+=tz[k1];
lrmun+=lr[k1];
if(j2!=5)
{
tzmun+=tz[8];
lrmun+=lr[8];
}
if(tzmun<=700) /*判断每种投资方案总金额是否小于或等于700*/
if(lrmun>lrmax) /*判断这次投资方案是否比前几次投次方案要好*/
{
lrmax=lrmun; /*if语句里记下最好的投资利润、总金额和投资给哪些销售点*/
tzmax=tzmun;
for(m=1;m<9;m++)
a[m]=0;
a[i1]=1;
a[i2]=1;
a[j1]=1;
if(j1==4)a[j2]=1;
a[k1]=1;
if(j2!=5)a[8]=1;
}
tzmun-=tz[k1];
lrmun-=lr[k1];
if(j2!=5)
{
tzmun-=tz[8];
lrmun-=lr[8];
}
}
if(j2==5)
{tzmun-=tz[j2];lrmun-=lr[j2];}
}
tzmun-=tz[j1];lrmun-=lr[j1];
}
if(i2==2)
{tzmun-=tz[i2];lrmun-=lr[i2];}
}
tzmun-=tz[i1];lrmun-=lr[i1];
}
printf("tzmax=%d\nlrmax=%d\n\n",tzmax,lrmax);
for(m=1;m<9;m++)
{
if(a[m]==1)printf(" a%d",m);
}
printf("\n");
for(m=1;m<9;m++)
{
if(a[m]==1)printf("%5d",tz[m]);
}
printf("\n");
for(m=1;m<9;m++)
{
if(a[m]==1)printf("%5d",lr[m]);
}
printf("\n\n");
}程序算出最好的投资是:a1 a5 a6 a8 总投资金额:700万 总利润:134万
运行结果:
tzmax=700
lrmax=134
a1 a5 a6 a8
200 170 190 140
36 20 30 48