贪婪算法编译时没有错误,但是运行时永远不会越过第一个动作

时间:2020-05-13 18:49:41

标签: c cs50 greedy

所以我正在使用cs50,并且正在执行贪婪算法的“现金”问题,并且编写的代码可以很好地编译,但是当我运行它时,它会要求“更改美元金额:”,然后从不接受有效的响应,我被卡住了,永远无法输入信息。

一个朋友说我缺少输入,这就是为什么它不起作用的原因,但是我正尝试使用用户的输入,所以...非常感谢您的帮助,因为我认为我确实接近,我只是不知道如何解决它,help50表示从技术上讲没什么错,所以我只是停滞不前。

谢谢!

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

int main(void)
{
    // identifying variables
float amount;
int cents;
int count = 0;

// prompting user for input
do
{
    amount = get_float("Change amount in USD: ");
}
// ensuring a positive number
while (amount < 0);

//changing float to an int
    cents = round(amount*100);

// using highest denomination first (quarters)
while (cents % 25 >= 0)
{
    count++;
    cents = cents % 25;
}

// using next highest denomination second (dimes)
while (cents % 10 >= 0)
{
    count++;
    cents = cents % 10;
}

// using next highest denomination third (nickels)
while (cents % 5 >= 0)
{
    count++;
    cents = cents % 5;
}

// using last denomination amount (pennies)
while (cents % 1 >= 0)
{
    count++;
    cents = cents % 1;
}

// displays number of coins used
printf("%i\n", count);

}

3 个答案:

答案 0 :(得分:1)

while (cents % 25 >= 0)
{
    count++;
    cents = cents % 25;
}

除法将始终为>= 0,因此您有无限循环,请切换到

while (cents % 25 > 0)

答案 1 :(得分:0)

由于逻辑错误,您陷入了无限循环。看一下while循环,例如:

while (cents % 25 >= 0)
{
    count++;
    cents = cents % 25;
}

modules操作将为您提供0到24之间的数字。无论原始值是多少美分,该条件始终为true。

您想要将条件更新为其他条件。请注意,在while期间,您应该以不同的方式更新cents,因为在第一次迭代之后,cents的值不会改变:假设它是10。它进入while循环,然后cents=cents%25将保持10。仍然是无限循环< / p>

答案 2 :(得分:0)

问题出在这部分代码(以及类似的代码)

// using highest denomination first (quarters)
while (cents % 25 >= 0)
{
    count++;
    cents = cents % 25;
}

这将基于any_integer_value % 25始终为>= 0的原理导致无限循环。但是,问题实际上根本不需要进行mod操作。相反,请检查减去硬币的值是否为>= 0,如果是,则进行减法。

// using highest denomination first (quarters)
while (cents - 25 >= 0)
{
    count++;
    cents = cents - 25;
}