背包问题动态规划没搞懂报错原因

没有懂报错的原因,不知道该怎么该,还是思路有问题

#include<stdio.h>
void swap(float z,float w,float v,int i);
int main()
{
float w[20],v[20],c,x[20],z[20];
float sum,l[20];//l放入背包的部分重量 sum价值总额和
int n,i;
sum =0;
printf("输入物品数量:");
scanf("%d",&n);
printf("输入背包容量:");
scanf("%f",&c);
printf("输入物品重量:");
for(i=0;i<n;i++)
{
scanf("%f",&w[i]);
}
printf("输入物品价值:");
for(i=0;i<n;i++)
{
scanf("%f",&w[i]);
}
//单位价值
for(i=0;i<n;i++)
{
z[i]=v[i]/w[i];
}
for(i=0;i<n;i++)
{
if(z[i]<z[i+1])
{
swap(z,w,v,i);
}
}
for(i=0;c!=0;i++)
{
if(w[i]<=c)
{
x[i]=1;
l[i]=w[i];
c=c-w[i];
sum=sum+v[i];
}

    if(w[i]>c)
    {
        x[i]=1;
        l[i]=c;
        sum=sum+c*z[i];
    }
  }
  
  //输出
  for(i=0;i<n;i++) 
  {
      if(x[i]==1)
      {
          printf("放入重量为%f,价值为%f的物品,放入重量为%f:",w[i],v[i],l[i]);
      }
  }
  printf("总价值为:%f",sum);
  

}

void swap(float z,float w,float v,int i)
{
float temp;
temp=z[i];
z[i]=z[i+1];
z[i+1]=temp;

temp=w[i];
w[i]=w[i+1];
w[i+1]=temp;

temp=v[i];
v[i]=v[i+1];
v[i+1]=temp;

}

都报啥错啊
for(i=0;i<n;i++)
{
if(z[i]<z[i+1])
{
swap(z,w,v,i);
}
这里是有问题的。有效值总共就n个,当i=n-1时,z[i+1]是个无效数,进行比较处理就不知道会怎么样了。改为i<n-1

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632