CS50 pset1 贪心挑战
CS50 pset1 Greedy Challenge
在这里问这个愚蠢的问题我有点惭愧,但事实是,我已经尝试了所有方法,仍然看不出错误在哪里。
我在编程方面是 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)
替换该检查
#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");
}
在这里问这个愚蠢的问题我有点惭愧,但事实是,我已经尝试了所有方法,仍然看不出错误在哪里。
我在编程方面是 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)
#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");
}