关于网友提出的“ 求教 背包问题 我的maxV输出总是一堆负数。。”问题疑问,本网通过在网上对“ 求教 背包问题 我的maxV输出总是一堆负数。。”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 求教 背包问题 我的maxV输出总是一堆负数。。
描述: # include
# define N 100
double limitW,totV,maxV;
int option[N],cop[N];
struct { double weight;
double value;
}a[N];
int n;
void find(int i,double tw,double tv)
{ int k;
/*考虑物品i包含在当前方案中的可能性*/
if (tw+a[i].weight<=limitW)
{ cop[i]=1;
if (i<>
else
{ for (k=0;k<>
option[k]=cop[k];
maxV=tv;
}
cop[i]=0;
}
/*考虑物品i不包含在当前方案中的可能性*/
if (tv-a[i].value>maxV)
if (i<>
else
{
for (k=0;k<>
option[k]=cop[k];
maxV=tv-a[i].value;
}
}
void main()
{ int k;
double w,v;
printf("输入物品种数\n");
scanf("%d",&n);
printf("输入各物品的重量和价值\n");
for (totV=0.0,k=0;k<>
{ scanf("%1f%1f",&w,&v);
a[k].weight=w;
a[k].value=v;
totV+=v;
}
printf("输入限制重量\n");
scanf("%1f",&limitW);
maxV=0.0;
for (k=0;k<>
find(0,0.0,totV);
for (k=0;k<>
if (option[k]) printf("%4d",k+1);
printf("\n总价值为:%2f\n",maxV);
getchar();
char z;
scanf("%d",&z);
}
总价值为:总是会输出负数
对C语言不是很熟悉所以实在找不出问题在哪,有深夜没睡的大神么? 求解答。。。。。
解决方案1: scanf("%lf%lf",&w,&v);
scanf("%lf",&limitW);
将这两个语句中的1f(数字1)改为lf(英文l)即可。
解决方案2:
double,格式化字符串要用 %lf, 获取(scanf)时用
lf。英文字符l
你用的却是
1f,数字 1
2005的MSDN上,printf的%f指double类型,scanf的%f指float。。。。
以上介绍了“ 求教 背包问题 我的maxV输出总是一堆负数。。”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2735419.html