#define N 30
int xiangzi(int n ,int V ,int a[]) //樓主後面的Vo數組必須放進遞歸函數裏面或定義成全局數組 另外h[n]什麽情況
{
int minv,t,m=V;
if(n==0)
{
if(a[n]<=V) // V是剩余空間。minv是所生最小空間,是待求變量,而不是已知的 ,不能V<minv 這樣用來判斷。
minv=V-a[n];
else
minv=V;
}
else
{
t=xiangzi(n-1,V,a);
if(a[n]<=V) //可能a[n]比V大 如果按樓主的程序沒判斷 那麽此時m必定小於0,最後的minv肯定是會小雨0的。應該先判斷 排除這種情礦。因此前面定義m的時候可以初始化m=V;
m=xiangzi(n-1,V-a[n],a); /*考慮選擇這個物體的情況*/
if(t<m)
minv=t;
else
minv=m;
}
return minv;
}
void main()
{
int V;
int n,i,m,min;
int Vo[N];
printf("箱子的容量V為:");
scanf("%d",&V);
printf("物品的種類數為:");
scanf("%d",&n);
printf("物品的體積分別為:\n");
for(i=0;i<n;i++)
scanf("%d",&Vo[i]); //"%d "改成“%d” d後面的空格去掉。不好意思 我學的c++,c的語法不怎麽東, 只是調試出來了,不知道原因,可能語法問題吧。
min=xiangzi(n-1,V,Vo);
printf("%d\n",min); //另外別忘了輸出
system("pause");
}
就這樣了。。。