我试图在C中编写一个贪心算法

时间:2014-06-27 01:51:16

标签: c++ algorithm greedy

这有什么意义吗?

我被困在这里有4个错误,这是因为我没有宣布q,d,n,p。但如果我这样做,它会继续向我发送更多错误。

可能存在关于混合整数和浮点数的事情。

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


int main(void)
{
    {
        printf("O hai! ");
    }
    float valueTotal, quarter, valueQuarter, dime, valueDime,nickel, valueNickel, penny, valuePenny; 
    do
    {
        printf("How much change is owed?\n");
        valueTotal = GetFloat();
    }
    while (valueTotal <= 0);


    for (float quarter = 0; valueTotal >= 0.25; quarter--)
    {
        valueQuarter = valueTotal - ( q * 0.25);
    }
    for (float dime = 0; valueQuarter >= 0.10; dime--)
    {
        valueDime = valueQuarter - ( d * 0.10);
    } 
    for (float nickel = 0; valueDime >= 0.05; nickel--)
    {
        valueNickel = valueDime - ( n * 0.05);
    }
    for (float penny = 0; valueNickel >= 0.01; penny--)
    {
        valuePenny = valueNickel - ( p * 0.01);
    }
    printf("q+d+n+p\n");
}

1 个答案:

答案 0 :(得分:1)

  

我没有宣布q,d,n,p。

这正是你的问题 - 至少其中一个,无论如何。如果这些变量未声明,世界上的程序/代码应该如何评估像q * 0.25这样的东西?如果我说&#34;嘿,男人,x是0.25倍?&#34;你完全不知道,或者告诉我答案取决于x。这段代码也是如此。

你说:

  

但如果我这样做,它会继续向我发送更多错误。

我假设您还需要初始化它们(或者,在外行人的条件下,将它们设置为等于某些东西,即.q = 0)

此外,你的循环条件都没有实际改变....意味着它们无限循环。确保循环中的代码实际上帮助您达到满足循环条件的目标;例如:

 for (float quarter = 0; valueTotal >= 0.25; quarter--)
    {
        valueQuarter = valueTotal - ( q * 0.25);
    }

valueTotal总是大于0.25(如果它开始时小于0.25),因为你根本不会改变它。