#include
#include
#define MAXWEIGHT 20
#define n 3
float pw[n]={0},x[n]={0};
int w[n]={0},p[n]={0};
void sort(int p[],int w[])
{
int temp1,temp2;
float temp;
int i,j;
for(i=0;i
pw[i]=float(p[i])/w[i];
}
for(i=0;i
for(j=i+1;j
if(pw[i]
temp=pw[i],pw[i]=pw[j],pw[j]=temp;
temp1=p[i],temp2=w[i];
p[i]=p[j],w[i]=w[j];
p[j]=temp1,w[j]=temp2;
}
}
}
}
void GreedyKnapsack(int p[],int w[])
{
int m=MAXWEIGHT,i;
for(i=0;i
if(w[i]>m) break;
x[i]=1.0;
m=m-w[i];
}
if(i
}
void main()
{
int i;
printf("请输入每个物体的效益和重量:\n");
for(i=0;i
cin>>p[i]>>w[i];
}
for(i=0;i
printf("原物体%d的效益和重量分别为%d,%d:\n",i+1,p[i],w[i]);
}
sort(p,w);
printf("\n\n\n按效益值非递增顺序排列物体:\n");
for(i=0;i
printf("物体%d的效益和重量分别为%d,%d 效益值为:%f\n",(i+1),p[i],w[i],pw[i]);
}
GreedyKnapsack(p,w);
printf("\n\n\n最优解为:\n");
for(i=0;i
printf("第%d个物体要放%f:\n",i+1,x[i]);
}
}
这是正确的算法
void GreedKnapsack(p,w) 该是
void GreedKnapsack(int p,int w)
scanf("%d",w[i]);
scanf("%d",p[i]);
改为:
scanf("%d",&(w[i]));
scanf("%d",&(p[i]));
void sort(w,p)
void GreedKnapsack(p,w)
改为:
void sort(int w,int p)
void GreedKnapsack(int p,int w);
你错误太多了啊
大哥
void sort(w,p) 函数定义 变量应该说明类型
另外 可多地方有粗心造成的错误
比如for(i=0;i
你的函数大多没有返回值,又没出现指针,这样的函数有意义么?还有那么多的全局变量..............这一百分我不要了...........你再写写吧
#include
#define MAXWEIGHT 30
#define n 4
float pw[n],x[n];
int w[n],p[n];
void sort(int w[], int p[])
{
int temp1,temp2;
int i;
for(i=0;i
pw[i]=float(p[i])/float(w[i]);
}
for(i=0;i
for(int j=i+1;j
if(pw[i]
temp1=p[i];
temp2=w[i];
p[i]=p[j];
w[i]=w[j];
p[j]=temp1;
w[i]=temp2;
}
}
}
}
void GreedKnapsack(int p[],int w[])
{
int m=MAXWEIGHT;
int i;
for(i=0;i
if(w[i]>m) break;
x[i]=1.0;
m=m-w[i];
}
if(i
}
void main()
{
int i;
printf("清输入每个物体的重量和效益:\n");
for(i=0;i
scanf("%d",&w[i]);
scanf("%d",&p[i]);
}
sort(w,p);
GreedKnapsack(p,w) ;
printf("每个背包的重量和效益分别为:\n");
for(i=0;i
printf("背包%d的重量和效益分别为%d,%d:\n",i,w[i],p[i]);
}
}
我给你调了一下语法错误,你的程序可以运行了。至于算法问题你还需要自己思考啊,不能总依赖别人啊。
函数形参数不能直接这样些
void sort(w,p) ==》void sort(int *w,int *p)
float temp1,,temp2,b[]; b不能这样定义,要么*b,要么直接b==>
float temp1,temp2,b;
sort和GreedKnapsack函数的i,j
没有定义
加一个int i,j;
sort函数的第一个和第二个循环
for(i=0;i
pw[i]=p[i]/w[i]; 这条语句没错但不回返回一个正确的答案改为
pw[i]=((float)p[i])/w[i];
C语言区分大小写,所以N!=n,
for(j=i+1;j
sort函数的if(pw[i]
main函数里的scanf("%d",w[i]);
scanf("%d",p[i]); 必须是地址
scanf("%d",&w[i]);
scanf("%d",&p[i]);
好了语法方面的都改了,不过我不知道你上面两个函数干什么用,MAIN函数没调用它。问题很大