gpt4 book ai didi

CS50 PSet 1 贪婪

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:40 26 4
gpt4 key购买 nike

我正在编写一个程序,它接受输入并打印出使用的最少数量的硬币。当我运行程序并输入内容时,它没有按预期工作并且不打印任何内容。我在这里做错了什么?

#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);
}

It doesn't print anything

最佳答案

问题是程序陷入了死循环。最初,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

现在,循环中的 if 条件都不满足,但 while 中的条件仍然为真。所以,它永远不会爆发。要更正此问题,请将 if block 中的所有 > 符号替换为 >=。这将为您提供正确数量的硬币。 (但您必须确保 ff = 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++;
}
}

关于CS50 PSet 1 贪婪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38952478/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com