我的错误在哪里? CS50 greedy.c

时间:2018-01-02 12:36:45

标签: c cs50

有人可以看看下面的代码并告诉我我做错了什么吗?我附上了check50支票。 非常感谢提前

#include <cs50.h>
#include <stdio.h>

int main(void)
{

    float change;
    do
    {
        printf("O hai! How much change is owed?\n");
        change = get_float();
    }
    while (change < 0 );


    float cents = change *100;   // create float cents

    // initialise counter with 0
    int counter = 0;

    // loop as long as cents  bigger than 0
    while (cents > 0)
    {

        // substract 25 cents each time
        while (cents >= 25)
        {
            cents = cents - 25;
            counter++;
        }
         // substract 10 cents each time
        while (cents >= 10)
        {
            cents = cents - 10;
            counter++;
        }
         // substract 5 cents each time
        while (cents >= 5 )
        {
            cents = cents - 5;
            counter++;
        }
         // substract 1 cent each time
         while (cents >= 1 )
        {
            cents = cents - 1;
            counter++;
        }

    }

    printf("%i\n", counter);
}
Checking..........

:)贪婪存在

:)贪婪编译

:)输入0.41产生4的输出

:) 0.01的输入产生1的输出

:( 0.15的输入产生2的输出     没找到&#34; 2 \ n&#34;

输入1.6的

:)产生7的输出

输入23的

:)产生92的输出

:( 4.2的输入产生18的输出     在等待程序退出时超时

:)拒绝负面输入,如-.1

:)拒绝&#34; foo&#34;

的非数字输入

:)拒绝&#34;&#34;

的非数字输入

1 个答案:

答案 0 :(得分:1)

这样做:

int cents = round(change * 100);

仅仅因为在这种背景下没有分数片段。

这也可以确保错误输入例如7.324(而非7.32)得到“更正”。