CS50 PSet 1 贪婪
CS50 PSet 1 Greedy
我正在编写一个程序,接受输入并打印出使用的最少数量的硬币。当我 运行 程序并输入输入时,它没有按预期工作并且不打印任何内容。我在这里做错了什么?
#include <stdio.h>
#include <cs50.h>
int main (void)
{
float f = 0;
int count = 0;//number of coins
do
{
printf("How much change is owed?\n");
f = GetFloat();
}
while (f < 0);
//Convert to cents
f = f * 100;
while (f > 0)
{
if (f > 25)
{
f = f - 25;
count++;
}
else if (f > 10)
{
f = f - 10;
count++;
}
else if (f > 5)
{
f = f - 5;
count++;
}
else if (f > 1)
{
f = f - 1;
count++;
}
}
printf("%d", count);
}
问题是程序陷入了死循环。最初,f=0.41
。然后,你做 f = f * 100
;我们有 f = 41
.
然后,当您在循环中移动时,
首先,f>25
,所以 f = f - 25
,你得到 f = 16
。
然后,下一次迭代,f>10
,所以 f = f - 10
,你得到 f = 6
。
然后,f>5
,所以 f = f - 5
,你得到 f = 1
。
现在,循环中的none个if条件都满足了,但是while中的条件仍然为真。所以,它永远不会爆发。要更正此问题,请将 if 块中的所有 >
符号替换为 >=
。这将为您提供正确数量的硬币。 (但你必须确保 f
在 f = f * 100
之后没有任何小数部分)。
f = (int)(f * 100);
while (f > 0)
{
if (f >= 25)
{
f = f - 25;
count++;
}
else if (f >= 10)
{
f = f - 10;
count++;
}
else if (f >= 5)
{
f = f - 5;
count++;
}
else if (f >= 1)
{
f = f - 1;
count++;
}
}
你的程序永远不会在 f 的值变为 1 后结束。将 '>' 符号替换为 '>=' 符号
我正在编写一个程序,接受输入并打印出使用的最少数量的硬币。当我 运行 程序并输入输入时,它没有按预期工作并且不打印任何内容。我在这里做错了什么?
#include <stdio.h>
#include <cs50.h>
int main (void)
{
float f = 0;
int count = 0;//number of coins
do
{
printf("How much change is owed?\n");
f = GetFloat();
}
while (f < 0);
//Convert to cents
f = f * 100;
while (f > 0)
{
if (f > 25)
{
f = f - 25;
count++;
}
else if (f > 10)
{
f = f - 10;
count++;
}
else if (f > 5)
{
f = f - 5;
count++;
}
else if (f > 1)
{
f = f - 1;
count++;
}
}
printf("%d", count);
}
问题是程序陷入了死循环。最初,f=0.41
。然后,你做 f = f * 100
;我们有 f = 41
.
然后,当您在循环中移动时,
首先,f>25
,所以 f = f - 25
,你得到 f = 16
。
然后,下一次迭代,f>10
,所以 f = f - 10
,你得到 f = 6
。
然后,f>5
,所以 f = f - 5
,你得到 f = 1
。
现在,循环中的none个if条件都满足了,但是while中的条件仍然为真。所以,它永远不会爆发。要更正此问题,请将 if 块中的所有 >
符号替换为 >=
。这将为您提供正确数量的硬币。 (但你必须确保 f
在 f = f * 100
之后没有任何小数部分)。
f = (int)(f * 100);
while (f > 0)
{
if (f >= 25)
{
f = f - 25;
count++;
}
else if (f >= 10)
{
f = f - 10;
count++;
}
else if (f >= 5)
{
f = f - 5;
count++;
}
else if (f >= 1)
{
f = f - 1;
count++;
}
}
你的程序永远不会在 f 的值变为 1 后结束。将 '>' 符号替换为 '>=' 符号