|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 血轩宇 于 2012-4-30 00:32 编辑
这是我最终的代码。去掉
printf("输入7个物品重量:\n");
for(i=1;i<=7;i++)
scanf("%f",&w[i]);
printf("输入7个物品价值:\n");
for(i=1;i<=7;i++)
scanf("%f",&v[i]);
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[8],x[8];
int i,j;
float w1[8],v1[8];
float m,sum;
sum=0;
for(i=1;i<=n;i++)
a[i]=v[i]/w[i];
for(i=1;i<=n-1;i++)
{
for(j=1;j<=n-1;j++)
if(a[j]<a[j+1])
{
m=a[j];
a[j]=a[j+1];
a[j+1]=m;
}
}
for(i=1;i<=n;i++)
{
v1[i]=0;
w1[i]=0;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++){
if((int)(v[i]/w[i]*100)==(int)(a[j]*100) && v1[j]==0 && w1[j]==0)
{
v1[j]=v[i];
w1[j]=w[i];
break;
}
}
}
for(i=1;i<=n;i++)
{
x[i]=0;
}
i=1;
while(w1[i]<=c)
{
x[i]=1;
c=c-w1[i];
i++;
}
x[i]=c/w1[i];
for (i=1;i<8;i++)
{sum=(sum+v[i]*x[i]);}
printf("物品的最大价值:\n");
printf("%f\n",sum);
printf("物品的放入情况为:\n");
for(i=1;i<8;i++)
if(x[i]>0 )
printf("%f\n",x[i]);
}
void main()
{
float w[8]={0,2,3,5,7,1,4,1};
float v[8]={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[i]);
printf("输入7个物品价值:\n");
for(i=1;i<=7;i++)
scanf("%f",&v);
printf("输入背包容量:\n");
scanf("%f",c);
bag(w,v,c,7);
}
[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i] |
|