C语言程序 请大家帮帮忙

来源:百度知道 编辑:UC知道 时间:2024/06/17 20:12:15
现在有三组向量
a(4,6,3,8,2)
b(3,5,2,6,1)
c(1,2,1,2,3)
在b中随意抽取n个数
使bi1+bi2+..+bin<12
求怎样的取法使得
(ai1+ai2+..ain)/[(ci1+ci2+..cin)+8]
能达到最大值

#include <stdio.h>
#include <stdlib.h>
int a[5]={4,6,3,8,2};
int b[5]={3,5,2,6,1};
int c[5]={1,2,1,2,3};
void fun(int n,int arr[],int len)
{
int i;
for(i=0;i<len;++i) arr[i]=0;
for(i=0;n;++i,n>>=1)
{
if(n&1) arr[i]=1;
}
}
int main()
{
int i,j,x,y,z,m=-99999;
double max=-99999.9;
int used[5];
for(i=0;i<32;++i)
{
fun(i,used,5);
for(y=j=0;j<5;++j) y+=b[j]*used[j];
if(y<12)
{
for(x=z=j=0;j<5;++j)
{
x+=a[j]*used[j];
z+=c[j]*used[j];
}
if(max<(double)x/(z+8.0)) {m=i;max=(double)x/(z+8.0);}
}
}
fun(m,used,5);
printf("\na: ");for(j=0;j<5;++j) if(used[j]) printf("%5d",a[j]);
pr