gpt4 book ai didi

c - C 中的贪心算法不返回任何值?

转载 作者:太空宇宙 更新时间:2023-11-04 05:47:36 25 4
gpt4 key购买 nike

我正在尝试编写一个贪婪算法,其输入应返回零钱中使用的最少数量的硬币,但它不返回任何值。我不确定为什么。它只是要求输入,然后什么也不显示。

我创建了一个先前的线程,其中确定了一个导致无限循环的错误,该循环被压扁了,但现在我的逻辑中似乎还有另一个潜在的错误。

#include <stdio.h>
#include <cs50.h>
#include <math.h>

// declare variable change_owed, num_coins, and input globally
float change_owed = 0;
float input;
int num_coins;

int main(void)
{
// makes sure the input is non-negative
do
{
input = get_float("Amount paid\n");
}
while(input <=0);

// begin checking
while(input > 0)
{
if(input - .25 >= 0) // quarters
{
num_coins++; // number of coins used, to be printed later, is incremented
input = input - .25; // coin is subtracted from total
}
if (input - .10 >= 0) // dimes
{
num_coins++;
input = input - .10;
}
if (input - .05 >= 0) // nickels
{
num_coins++;
input = input - .05;
}
if (input - .01 >= 0) // pennies
{
num_coins++;
input = input - .01;
}
}
printf("%i", num_coins);
}

最佳答案

double 的常用格式中,.10 不是 .10,而是 0.100000001490116119384765625。此外,您正在使用 float 变量(float input)和 double 常量(.10。 05, .01).在某个时候,您的程序有剩余金额,例如 .00999…5 不到一便士,因此它没有硬币可以从中减去,所以代码会一直循环下去,不会减去任何东西。要解决此问题,请在获得 input 后立即将其乘以 100,并将其四舍五入为最接近的整数(与 int cents = roundf(input * 100); 一样), 并使用整数算法进行其余计算。

完成后,您的程序将开始产生结果,您将需要重新考虑您拥有的 whileif 结构,如某些评论。

关于c - C 中的贪心算法不返回任何值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56174946/

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