?? 小明買書.c
字號(hào):
#include<math.h>
main()
{
int d[6],m,i,j,m;
long b[63],flag;
float c[6],min,x;
printf("請(qǐng)輸入背包可裝的重量");
scanf("%d",&m);
printf("請(qǐng)輸入六個(gè)物體的重量 ");
for(i=0;i<6;i++) /*輸入六個(gè)浮點(diǎn)數(shù)*/
scanf("%f",&c[i]);
for(i=0,min=-1,d[0]=0;d[0]<2;d[0]++) /*建立六個(gè)數(shù)的全部組合并處理*/
for(d[1]=0;d[1]<2;d[1]++) /*i:差值具有min組合的數(shù)量*/
for(d[2]=0;d[2]<2;d[2]++) /*min:與10的最小差值*/
for(d[3]=0;d[3]<2;d[3]++)/*d[]:組合時(shí)是否取該數(shù)的標(biāo)志*/
for(d[5]=0;d[5]<2;d[5]++)
{
for(flag=0,x=0.,j=5;j>=0;j--)/*flag:將六個(gè)數(shù)的組合用對(duì)應(yīng)的一個(gè)十進(jìn)制位表示*/
{x+=c[j]*d[j];flag=flag*10+d[j];}/*x:對(duì)應(yīng)六個(gè)數(shù)的組合的和*/
x=((x-m>0)?x-m:m-x); /*x:組合的和與10的差*/
if(min<0)
{
min=x; /*對(duì)第一次計(jì)算出的差min進(jìn)行處理*/
b[i++]=flag; /*b[]:記錄有相同min的flag的數(shù)組 i:b[]數(shù)組的下標(biāo)*/
}
else if(min-x>1.e-6)/*對(duì)新的min的處理*/
{
min=x;
b[0]=flag;
i=1;
}
else if(fabs((double)x-min)<1.e-6)/*相等的min的處理*/
b[i++]=flag;
}
for(m=0;m<i;m++) /*輸出全部i個(gè)與10的差值均為min的組合*/
{
printf(" 10(+ -)%.2f=",min);
for(flag=b[m],j=0;flag>0;j++,flag/=10)
if(flag%10) /*將b[]中存的標(biāo)記flag還原為各個(gè)數(shù)的組合*/
if(flag>1)
printf("%.2f+",c[j]);
else
printf("%.2f\n",c[j]);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -