目标是创建一种算法,该算法接受输入并给出输出从输入中减去值(25、10、5、1)的次数。代码需要尽可能以最贪婪的方式做到这一点,并尽可能取最大的价值。
输入1的预期输出为4。实际输出只是将端子移至下一行。
没有错误消息。
以前,我没有if语句后的continue语句和{}括号,该语句具有有效的代码,但是结果仍然不准确。输入1和2得到相同的输出:5。
这里是我当前的代码,我知道它可能很凌乱,并且进行除法而不是减法会更有效和更“干净”。但是,由于我最近才刚学习C,所以我认为走婴儿的脚步会更容易。
#include <cs50.h>
#include <stdio.h>
#include <math.h>
int main()
{
float dollars;
int cents;
do
{
dollars = get_float("Change owed: ");
cents = round( dollars * 100);
}
while ( dollars < 0);
for( int coins = 1; cents > 0; coins++ )
{
if (cents >= 25)
{
cents -= 25;
continue;
}
if (cents >= 10)
{
cents -= 10;
continue;
}
if (cents >= 5)
{
cents -= 5;
continue;
}
if (cents >= 1)
{
cents -= 1;
continue;
}
if (cents == 0)
{
printf(" %i", coins);
}
printf ("\n");
}
}
答案 0 :(得分:1)
在这里,您可以使用该功能为您提供任何名义的结果。使用整数要容易得多。
int nominals[] = {100, 25, 10, 5, 1, 0};
void getNominals(double money, int *result)
{
unsigned ncents = money * 100.0;
int *nm = nominals;
while(*nm && ncents)
{
*result++ = ncents / *nm;
ncents %= *nm++;
}
}
int main(void)
{
int result[sizeof(nominals) / sizeof(nominals[0])] = {0};
getNominals(4.36, result);
for(size_t index = 0; nominals[index]; index++)
{
printf("%d = %d\n", nominals[index], result[index]);
}
}