Ronald Prithiv
Ronald Prithiv

Reputation: 109

CS50 PSet 1 Greedy

I am writing a program that takes an input and should print out the least number of coins used. When I run the program and type in an input, it doesn't work as expected and doesn't print anything. What am I doing wrong here?

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

int main (void)
{
    float f = 0;
        int count = 0;//number of coins
        do 
        {
            printf("How much change is owed?\n");
            f = GetFloat();
        }
        while (f < 0);

    //Convert to cents
        f = f * 100;
        while (f > 0)
        {
            if (f > 25)
            {
                    f = f - 25;
                    count++;
            }
            else if (f > 10)
            {
                    f = f - 10;
                    count++;
            }
            else if (f > 5)
            {
                    f = f - 5;
                    count++;
            }
            else if (f > 1)
            {
                    f = f - 1;
                    count++;
            }
        }
        printf("%d", count);
}

It doesn't print anything

Upvotes: 0

Views: 239

Answers (2)

sopho-saksham
sopho-saksham

Reputation: 181

your program will never end after value of f becomes 1. Replace '>' signs with '>=' signs

Upvotes: 0

GoodDeeds
GoodDeeds

Reputation: 8527

The problem is that the program is stuck in an infinite loop. Initially, f=0.41. Then, you do f = f * 100; and we have f = 41.

Then, as you move through the loop,

First, f>25, so f = f - 25, and you get f = 16.

Then, next iteration, f>10, so f = f - 10, and you get f = 6.

Then, f>5, so f = f - 5, and you get f = 1.

Now, none of the if conditions in the loop are satisfied, but the condition in the while remains true. So, it never breaks out. To correct this, replace all > symbols in the if blocks with >=. This will give you the correct number of coins. (but you must ensure that f does not have any fractional part after f = f * 100).

 f = (int)(f * 100);
        while (f > 0)
        {
            if (f >= 25)
            {
                    f = f - 25;
                    count++;
            }
            else if (f >= 10)
            {
                    f = f - 10;
                    count++;
            }
            else if (f >= 5)
            {
                    f = f - 5;
                    count++;
            }
            else if (f >= 1)
            {
                    f = f - 1;
                    count++;
            }
        }

Upvotes: 2

Related Questions