【发布时间】:2020-04-06 15:22:23
【问题描述】:
您必须将最多 15 种不同的货物从一个港口运送到另一个港口。运输这些货物的货船的承载能力为 50 吨。枚举负载,并提供有关每个负载重量的信息作为输入。
假设每件货物的重量小于等于50吨且大于0。
您将在一行中从输入中读取每个负载的重量。您的输入将以 -1 结尾。您将打印必要的旅行次数。
示例输入:
50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 -1输出:
15
但我得到这个错误,每当我给程序输入时
./vpl_execution: line 5: 15093 Bus error (core dumped) ./main
顺便说一句,我对这种情况进行了搜索,我认为我并没有超出数组索引或使用错误的指针错误。另外,我在这里看到了同样的问题和一些解决方案,但我想知道为什么代码不起作用,然后自己解决问题。非常感谢大家的帮助。
#include <stdio.h>
int main()
{ int w,i,t,sum,index;
int list[16];
w = 1;
do
{
scanf("%d",&w);
list[index] = w;
index++;
}while(w >= 0);
t = 0;
for(i = 0;i < ((sizeof(list)/sizeof(list[0]))+1);i++)
{
sum =0;
if(sum <= 50)
{sum += list[i];}
else
{t++;}
}
printf("%d",t);
return 0;
}
【问题讨论】:
-
这是一个学习使用debugger的好机会。
-
"从单行中输入"您的程序不遵守该要求,值可以放置在任意数量的行中
-
您确定要再次初始化
sum=0吗?您将始终进入if分支,并且只保留sum中的最后一个元素。
标签: c algorithm loops segmentation-fault knapsack-problem