Expression Result Unused Greedy Algorithm

后端 未结 3 1946
南方客
南方客 2021-01-28 08:18

I have run this program and get the error expression result unused. I may be doing something simple wrong, but I have spent the day trying to figure it out to no avail. Any help

相关标签:
3条回答
  • 2021-01-28 08:21

    All the 4 statements x - 25, x- 10, x- 5, x - 1 will turn out to be useless unless you assign that value to x; Because you are trying to subtract the value from x, but you are not assigning the new value to x.

    Here is the solution of your problem:

    #include <stdio.h>
    #include <cs50.h>
    
    int main()
    {
        int x, y = 0;
        printf("Enter the amount of change ");
        x = GetFloat() * 100;
        while (x != 0)
        {
            if (x >= 25)
            {
                x = x - 25;   //or x-=25;
                y = y + 1;
            }
    
    
            if (x >= 10 && x < 25)
            {
                x = x - 10;   //or x-=10;
                y = y + 1;
            }
            if (x >= 5 && x < 10)
            {
                x = x - 5;    //or x-=5;
                y = y + 1;
            }
            if (x >= 1 && x < 5)
            {
                x = x - 1;     //or x-=1; or x--; or --x; :)
                y = y + 1;
            }
       }
       printf("The number of coins neccessary is %d", y);
    }
    
    0 讨论(0)
  • 2021-01-28 08:28
        if (x >= 25)
        {
            x - 25;               // This accomplishes nothing
            y = y + 1;
        }
        if (x >= 10 && x < 25)
        {
            x - 10;               // This accomplishes nothing
        }   y = y + 1;
        if (x >= 5 && x < 10)
        {
            x - 5;                // This accomplishes  nothing
        }   y = y + 1;
        if (x >= 1 && x < 5)
        {
            x - 1;                // This accomplishes nothing
            y= y + 1;
        }
    

    In each of those lines you're subtracting a number from x, but you're doing nothing with the result. If you're trying to update x with the result, you need to do just like you're doing with y, and put x = in front of the expression.

    So if you want x to go down by 25, you should write:

    x = x - 25; 
    

    Alternatively, you can write the shorthand:

    x -= 25;     // Note the equal sign 
    
    0 讨论(0)
  • 2021-01-28 08:32

    I would remain to be convinced about your loop structure. There's the division operator that can be used to good effect:

    int total = 0;
    int ncoins;
    int amount = GetFloat() * 100;
    
    assert(amount >= 0);
    
    ncoins = amount / 25;
    total += ncoins;
    amount -= ncoins * 25;
    
    assert(amount < 25);
    ncoins = amount / 10;
    total += ncoins;
    amount -= ncoins * 10;
    
    assert(amount < 10);
    ncoins = amount / 5;
    total += ncoins;
    amount -= ncoins * 5;
    
    assert(amount < 5);
    total += amount;
    

    That's written out longhand; you could devise a loop, too:

    int values[] = { 25, 10, 5, 1 };
    enum { N_VALUES = sizeof(values) / sizeof(values[0]) };
    
    int total = 0;
    int ncoins;
    int amount = GetFloat() * 100;
    
    assert(amount >= 0);
    
    for (int i = 0; i < N_VALUES && amount > 0; i++)
    {
        ncoins = amount / values[i];
        total += ncoins;
        amount -= ncoins * values[i];
    }
    
    assert(amount == 0);
    
    0 讨论(0)
提交回复
热议问题