无序全排列问题,给出更好的算法给分
小明假期同爸爸一起去书店,他选中6本书,每本书的单价分别为:3.1,1.7,2,5.3,0.9,7.2。不巧的是,爸爸只带了十几元,为了让小明过一个愉快的假期,爸爸仍然同意买书,但提出一个要求,要小明从六本中选出若干本,使得单价相加所得的和10最接近。
#include<math.h>
main()
{
int a[6][64],b[6]={31,17,20,53,9,72},c[64],i,x=100;
for(i=0;i<64;i++){
a[0][i]=i%2;
a[1][i]=i%4/2;
a[2][i]=i%8/4;
a[3][i]=i%16/8;
a[4][i]=i%32/16;
a[5][i]=i/32;
c[i]=fabs(a[0][i]*b[0]+a[1][i]*b[1]+a[2][i]*b[2]+a[3][i]*b[3]+a[4][i]*b[4]+a[5][i]*b[5]-100);
if(x>c[i])x=c[i];
}
for(i=0;i<6;i++)
printf("%10d",b[i]);
printf("\n");
for(i=0;i<64;i++)
if(c[i]==x)printf("%d%d%d%d%d%d\n",a[0][i],a[1][i],a[2][i],a[3][i],a[4][i],a[5][i]);
}