我正在尝试创建一个贪婪的算法,但我的代码最终不会返回值

时间:2016-09-28 02:48:30

标签: c computer-science cs50

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

int main(void)
{
    float x;
     printf("O hai! How much change is owed?\n");
    do
    {
        x = GetFloat();
        x = x * 100;
        return roundf(x);
        int c = 0;
        do
        { 
            return x = x - 25;
            return c = c + 1;
        }
        while (x >= 25);
        printf("%d coins\n", c);
    }
    while (x <= 0);
}

当我输入一个像.60这样的浮点数时,它应该将它转换为一个整数然后检测它是否大​​于25.这将是硬币从四分之一到一角硬币减少到镍等的过程中的第一个但是当我第一次尝试用它打印出第一个序列完成后得到的值来测试它时它没有返回任何内容。

2 个答案:

答案 0 :(得分:5)

一旦你的程序命中return roundf(x);,它就会停止(因为main已经返回),这就是为什么在读取第一个数字后它没有产生输出。

答案 1 :(得分:1)

此代码只需要一个return语句,但它是您忘记的语句。其他是语法错误,因此您需要查看return实际执行的操作。您的代码具有您需要的大部分内容,但顺序不正确。下面的返工完成了您希望代码在此处执行的操作,并提示下一步:

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

int main(void)
{
    printf("O hai! How much change is owed?\n");

    float x = GetFloat();
    x = x * 100;
    x = roundf(x);

    int coins[] = { 25 };

    int coin = 0;

    do
    {
        int c = 0;

        while (x >= coins[coin])
        {
            x = x - coins[coin];
            c = c + 1;
        }

        printf("%d coins worth %d\n", c, coins[coin]);
    }
    while (--coin >= 0);

    return 0;
}

即。您需要展开数组coins以包含其他面额,并将coin变量设置为coins中最大硬币的索引。每次通过你的循环,更改coin以索引下一个最大的硬币,直到不再有。

我已将内部do { ... } while()更改为简单的while() { ... }循环,因为您无法假设需要更换硬币。