贪心法背包问题
本帖最后由 血轩宇 于 2012-4-30 00:32 编辑这是我最终的代码。去掉
printf("输入7个物品重量:\n");
for(i=1;i<=7;i++)
scanf("%f",&w);
printf("输入7个物品价值:\n");
for(i=1;i<=7;i++)
scanf("%f",&v);
printf("输入背包容量:\n");
scanf("%f",c);
这一段就能正常运行。结果也正确
但是一加上,自由输入,然后就悲剧了。为什么啊!!!!
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
void bag(float w[],float v[],float c,int n)
{
float a,x;
int i,j;
float w1,v1;
float m,sum;
sum=0;
for(i=1;i<=n;i++)
a=v/w;
for(i=1;i<=n-1;i++)
{
for(j=1;j<=n-1;j++)
if(a<a)
{
m=a;
a=a;
a=m;
}
}
for(i=1;i<=n;i++)
{
v1=0;
w1=0;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++){
if((int)(v/w*100)==(int)(a*100) && v1==0 && w1==0)
{
v1=v;
w1=w;
break;
}
}
}
for(i=1;i<=n;i++)
{
x=0;
}
i=1;
while(w1<=c)
{
x=1;
c=c-w1;
i++;
}
x=c/w1;
for (i=1;i<8;i++)
{sum=(sum+v*x);}
printf("物品的最大价值:\n");
printf("%f\n",sum);
printf("物品的放入情况为:\n");
for(i=1;i<8;i++)
if(x>0 )
printf("%f\n",x);
}
void main()
{
float w={0,2,3,5,7,1,4,1};
float v={0,10,5,15,7,6,18,3};
float c=15;
int n=7;
int i;
printf("输入7个物品重量:\n");
for(i=1;i<=7;i++)
scanf("%f",&w);
printf("输入7个物品价值:\n");
for(i=1;i<=7;i++)
scanf("%f",&v);
printf("输入背包容量:\n");
scanf("%f",c);
bag(w,v,c,7);
}
虽然代码长没看懂,但我找到了错误。
printf("输入7个物品重量:\n");
for(i=1;i<=7;i++)
scanf("%f",&w);
printf("输入7个物品价值:\n");
for(i=1;i<=7;i++)
scanf("%f",&v);
printf("输入背包容量:\n");
scanf("%f",&c); //scanf("%f",c);
。。。。。。。。。。。。。。。。。。。。是这样么。。我去看看 果然是- - 。。。。。。。。我是渣渣。。。谢谢 这是什么:funk:看不懂- -
页:
[1]