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