gpt4 book ai didi

c - 了解分数背包、数组和指针

转载 作者:行者123 更新时间:2023-11-30 16:46:04 25 4
gpt4 key购买 nike

刚刚开始学习 C 编程,并决定参加 Coursera 上的算法工具箱类(class)。挑战之一是使用分数背包编写代码,最大化战利品的值(value),并提供伪代码来帮助编写解决方案。下面是伪代码以及我为伪代码编写的代码。

#include<stdio.h>

int min(int a, int b)
{
if (a < b)
return a;
else
return b;
}

int knapsack(int value[], int weight[])
{
int capacity = 100;
int val = 0;
int array[] = { 0 };
for (int i = 1; i < capacity; i++)
{
if (capacity == 0)
{
return val;
}
for (int i = 1; i < capacity; i++)
{
if (weight[i] > 0 && (value[i] / weight[i]))
{
int a = min(weight[i], capacity);
val = val + a * (value[i] / weight[i]);
weight[i] = weight[i] - a;
array[i] = array[i] + a;
capacity = capacity - a;
}
}
}
return val;
}

int main()
{
int value[100];
int weight[100];
scanf("%d", &value[100]);
scanf("%d", &weight[100]);
printf("%d", knapsack(value[100], weight[100]));
return 0;
}

伪代码

Knapsack(W, w1,v1,......wn,vn)
A <-- [0,0,], V <-- 0;
repeat n times:
if W = 0:
return (V,A)
select i with Wi > 0 and max vi/wi
a <-- min(wi, W)
V <-- V + a(vi/wi)
wi <-- wi - a, A[i] <-- A[i] + a, W <-- W - a
return (V, A)

编译时出现错误,例如“传递‘knapsack’的参数 1 使指针来自整数而不进行强制转换 [-Wint-conversion]”

printf("%d", knapsack(value[100],weight[100]));

“需要 int * 但参数的类型为 'int'”

int knapsack(int value[], int weight[])

我还想知道在函数 int knapsack 参数中声明 int value[], int Weight[] 是否是一个好习惯,以及更多解释在这种情况下使用数组和指针。

最佳答案

int knapsack(int value[], int weight[])

上述语句为编译器提供了有关如何调用函数(参数类型)以及函数将返回什么的信息。

  1. 它表示函数 knapsack 将返回一个整数值(第一个 int)。

  2. 它的名称是背包(区分大小写)。

  3. 它需要两个参数:一个整数数组(命名值)和一个整数数组(命名权重)。

第 1、2 和 3 点共同构成函数的签名。

要调用该函数,您必须传递 2 个整数数组作为其参数。

错误:value[100] 对应于数组中的INTEGER ENTRY,而不是数组本身。

要传递数组,您应该传递数组名称作为其参数,这是您的函数所期望的。

像这样调用函数:knapsack(value, Weight)

value 对应数组值权重对应数组权重

此外,传递 value[100] 对应于一些不在数组范围内的垃圾值,因为您只能访问从 value[0]value[99](基于 0 的索引)。

关于c - 了解分数背包、数组和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43891346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com