我在这里问这个愚蠢的问题有点as愧,但事实是,我已经尝试了一切,但仍然看不到错误在哪里。

关于编程,我是101%的菜鸟,而且我已经加入CS50。我试图从中获得最大的收益,所以我总是要接受那些不太舒服的挑战,以便最大程度地尝试和学习。

我已经完成了CS50 pset1中贪婪挑战的代码。我已经竭尽全力了,以使其获得我所掌握的知识所能做到的良好,简洁和简单,但是每次检查代码时,我总是得到一个错误提示。

在此,我附上代码检查和我的书面代码:

通过CS50终端脚本检查的代码:

:) greedy.c exists :) greedy.c compiles :) input of 0.41 yields output of 4 :) input of 0.01 yields output of 1 :) input of 0.15 yields output of 2 :) input of 1.6 yields output of 7 :( input of 23 yields output of 92 \ expected output, but not "94\n" :) input of 4.2 yields output of 18 :) rejects a negative input like -.1 :) rejects a non-numeric input of "foo" :) rejects a non-numeric input of ""

这是我的代码:

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

float change;

int coins = 0;
int quantity;

int main (void)
{
do
{
    printf("O hai! How much change is owed?\n");
    change = get_float();
}
while (change < 0);



//converting float change (dollars) into integer change (cents)

 quantity = round(change * 100.00);



while (quantity > 25) //This runs as long as quantity left is bigger than a quarter coin
{
    quantity -= 25;
    coins++;
}
while (quantity >= 10) //This runs as long as quantity left is bigger than a dime coin
{
    quantity -= 10;
    coins++;
}
while (quantity >= 5) //This runs as long as quantity left is bigger than a nickel coin
{
    quantity -= 5;
    coins++;
    }
while (quantity >= 1) //This runs as long as quantity left is bigger than 0
{
    quantity -= 1;
    coins++;
}


printf("%i\n", coins);
}`


免责声明:我想指出的是,我完全了解哈佛的《诚实信用守则》。我并不是想为一个问题提供一个简单的解决方案,而是摆脱这个挑战。

我希望有人能抽出自己的时间写下一个能启发我并帮助我理解代码失败原因的解释。
我没有寻求任何答案,如果您不这样想,则不必指出。
我只是CS的一个没有经验的初学者,他愿意阅读所有答案并最终了解为什么应该起作用的东西根本不起作用。

非常感谢您的耐心和时间!

最佳答案

问题出在您的第一个比较中,该读取为(quantity > 25)。当您有$ 23的大笔款项时,您会期望23 * 4 = 92 coins

但是,当您减去这些四分之一中的91个后,最终得到(quantity == 25),并且检查失败(因为quantity不再严格大于25而是等于它),将您推入2个角点并然后放入最后的镍,使其显示为94个硬币。

解决方法是(现在应该已经猜对了)用(quantity >= 25)替换该检查

关于c - CS50 pset1贪婪挑战,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42256121/

10-13 07:15