m0_57117352 2022-04-10 16:51 采纳率: 81.3%
浏览 27
已结题

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

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

#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;

}

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-04-10 16:54
    关注

    都报啥错啊
    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月9日
  • 已采纳回答 6月1日
  • 创建了问题 4月10日

悬赏问题

  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥15 对于这个问题的解释说明
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备