CS50 pset1 贪婪挑战
Posted
技术标签:
【中文标题】CS50 pset1 贪婪挑战【英文标题】:CS50 pset1 Greedy Challenge 【发布时间】:2017-07-04 12:17:05 【问题描述】:在这里问这个愚蠢的问题我有点羞愧,但事实是,我已经尝试了所有方法,但仍然看不到错误在哪里。
我在编程方面是 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
--> quantity >= 25
0.25 得到什么输出?
1!马上解决了!非常感谢!
【参考方案1】:
问题在于您的第一个比较为(quantity > 25)
。当您有 23 美元的总金额时,您期望 23 * 4 = 92 coins
。
但是,当您减去其中的 91 个四分之一时,您最终会得到 (quantity == 25)
并且检查失败(因为 quantity
不再严格大于比 25
而是等于它),将您推入 2 个硬币,然后进入最后一个镍币,使其显示为 94 个硬币。
解决方法是(你现在应该已经猜到了)用(quantity >= 25)
替换那个检查
【讨论】:
哦,我明白了!!!!非常感谢@YePhIcK!我明白问题出在哪里。很温柔的解释!我真的很感激!【参考方案2】: #include <stdio.h>
#include <cs50.h>
#include <math.h>
float change; // change can be float
int amount;
int coins = 0;
int main(void)
do
change = get_float ("Change owed: ");
while(change < 0);
amount = round(change * 100);
while( amount >= 25)
amount -= 25;//This is the end of loop substract until it reaches to the
//25 or less
coins ++;// this is the count of coins that how many owned coins will
//become big bite
while(amount >= 10)
amount -= 10;
coins ++;
while(amount >= 5)
amount-=5;
coins++;
while(amount >= 1)
amount -= 1;
coins++;
printf("The minimum number of coins that is to be used is: %i",coins);//the minimum number of coins
printf(" coins.");
printf("\n");
【讨论】:
仅由代码组成的答案不是高质量的答案。请编辑您的帖子以说明您所做的更改以及更改原因。以上是关于CS50 pset1 贪婪挑战的主要内容,如果未能解决你的问题,请参考以下文章
CS224W摘要18.Graph Neural Networks in Computational Biology