gpt4 book ai didi

c - 为什么我的最低硬币计算器对于输入 0.41 和 4.2 返回不正确的结果?

转载 作者:行者123 更新时间:2023-11-30 14:49:30 24 4
gpt4 key购买 nike

我正在处理 CS50x 的 pset1 的现金问题。该程序应该在给定浮点输入的情况下打印找零所需的最小硬币数量(美国)。我很难找出我的代码出了什么问题。该程序返回某些值的正确输出,例如 23、0.01 和 0.15,但返回错误的值,特别是 0.41 和 4.2,分别返回 3 和 22,而不是 4 和 18。我已经多次浏览过这段代码但我找不到任何东西。我唯一的想法是 float 可能存在舍入或截断的问题,但我真的不知道。

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

float total_coins = 0;

float get_coin_amount(float amount, float coin_value);

int main(void)
{
float change = get_float("Change owed: ");
get_coin_amount(get_coin_amount(get_coin_amount(get_coin_amount(change, 0.25), 0.1), 0.05), 0.01);
printf("%f\n", total_coins);
}

float get_coin_amount(float amount, float coin_value)
{
float revised_amount = amount; //revised amount will be used to give a working total of the amount left
while (revised_amount >= coin_value) //continue until the coin value can no longer go into the remaining amount
{
total_coins++; //update coins counter
revised_amount = revised_amount - coin_value;//updates revised_amount
}
return revised_amount; //return remainder left after the coin goes into it as many times as possible
}

最佳答案

我认为你应该使用整数而不是 float 。

即,将change乘以100并转换为int。使用 25、10、5、1 作为硬币值。否则看起来很坚固。

编辑:您的解决方案有缺陷。它实际上在任何时候都不会返回正确数量的硬币。似乎只适用于单个硬币的倍数。

应该看起来更像这样:

float get_coin_amount(float amount, float coin_value)
{
float revised_amount = amount; //revised amount will be used to give a working total of the amount left
while (revised_amount >= coin_value) //continue until the coin value can no longer go into the remaining amount
{
total_coins++; //update coins counter
revised_amount = revised_amount - coin_value;//updates revised_amount
}
if (revised_amount > 0) {
if (coin_value == 25) {
return total_coins + get_coin_amount(revised_amount, 10);
} else if (coin_value == 10) {
return total_coins + get_coin_amount(revised_amount, 5);
} else {
return total_coins + get_coin_amount(revised_amount, 1);
}
} else {
return total_coins;
}
}

然后像这样调用该方法:

amount = (int) (get_float(...) * 100);
num_coins = get_coin_amount(amount, 25);

关于c - 为什么我的最低硬币计算器对于输入 0.41 和 4.2 返回不正确的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49546231/

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