求助 求高手讲下列程序中的宏定义改成全局函数 (能够在运行时随意设定)
#include<stdio.h>#include<windows.h>
#define N 5 //物品的数目
#define WEIHT 50 //背包的限重 (请将“N”和“WEIGHT”改成全局变量,以满足在运行过程中随意设定“数目和限重”。这是典型的背包问题)
float maxratio= 0; // 记录最大比值
float preratio= 0; // 记录当前比值
float WOH=0; //记录最后包的价值
float WET=0; //记录最后包的重量
float Preworth= 0; // 记录当前背包总价值
float Preweight= 0; //记录当前背包总重量
float weight[N]; //记录物品的重量
float worth[N]; //记录物品的价值
bool flag[N]; //记录物品是否被使用
bool ans[N]; //记录物品的组合
void MAXratio()
{
int i , j ;
for(i=0;i<N;++i)
{
Preweight+=weight[i];
if(flag[i]==false&&Preweight<=WEIHT)
{
Preworth+=worth[i];
flag[i]=true;
preratio=Preworth/Preweight;
if(preratio>maxratio)
{
WOH=Preworth;
WET=Preweight;
maxratio= preratio;
for(j=0;j<N;++j)
ans[j]=flag[j];
}
MAXratio() ;
Preweight-=weight[i];
Preworth-=worth[i];
flag[i]=false;
}
else
Preweight-=weight[i];
}
}
int main()
{
int i ;
printf("输入背包的重量和价值...\n\n");
for(i=0;i<N;++i)
{
flag[i]=false;
scanf("%f%f",&weight[i],&worth[i]);
}
MAXratio();
printf("\t最大的比值是%f\n",maxratio) ;
printf("\t包的重量是%f\n",WET);
printf("\t包的价值是%f\n",WOH);
printf("\n\n包的组合是:\n");
for(i=0;i<N;++i)
if(ans[i])
printf("\t物品%d",i+1);
printf("\n");
system("pause");
return 1;
}
小弟再次谢过!