Жадный калькулятор в C - PullRequest
1 голос
/ 08 мая 2020

Мне нужно создать жадный калькулятор, который принимает только .25, .10, .5 и .1. Мне нужно напечатать минимальное количество монет, необходимое для выполнения изменения.

Это происходит на oop, и я не вижу, что делать, чтобы это исправить. Я все еще учусь, go мне легко :)

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

int main(void) {
    int coins = 0;
    int change;
    int i;
    do {
        change = get_float("How much change? ");
    }
    while (change <= 0); /* condition for acceptance*/

    int cents = round(change * 100);

    if (cents > 0) { /* run all whiles we get to 1c*/
        while ((cents - 25) >= 25) { /* run 25c */
            coins += 1;
        }

        while ((cents - 10) >= 10) { /* run  10c*/
            coins += 1;
        }

        while ((cents - 5) >= 5) { /* run  5c*/
            coins += 1;
        }
        while ((cents - 1) >= 1) { /* run  1c*/
            coins += 1;
        }
    } else { 
        printf("%d", coins);
    }
}

Ответы [ 2 ]

1 голос
/ 08 мая 2020

В вашем коде несколько проблем:

  • change определяется как int, поэтому введенная пользователем сумма усекается еще до начала вычислений, что дает неверный результат .
  • вы не обновляете cents ни в одном из циклов, поэтому вы получаете бесконечное l oop, если любое из этих условий истинно.
  • обратите внимание, что условия неверны: (cents - 25) >= 25 верно, если центов больше или равно 50.

  • тест if (cents > 0) неверен. Вы бы напечатали количество монет, только если cents <= 0.

  • последний l oop бесполезен, количество оставшихся центов - это количество пенни для подсчета.

Вот модифицированная версия:

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

int main(void) {
    float change;

    do {
        change = get_float("How much change? ");
    }
    while (change <= 0); /* condition for acceptance*/

    int cents = round(change * 100);  /* avoid rounding issues */
    int coins = 0;

    while (cents >= 25) { /* count quarters */
        cents -= 25;
        coins += 1;
    }
    while (cents >= 10) { /* count dimes */
        cents -= 10;
        coins += 1;
    }
    while (cents >= 5) { /* count nickels */
        cents -= 5;
        coins += 1;
    }
    count += cents;  /* count pennies */
    printf("%d\n", coins);
    return 0;
}
0 голосов
/ 08 мая 2020

Переменная cents никогда не изменяется. (cents - 25) действительно возвращает значение текущих центов минус 25, но вы не назначаете его переменной cents, поэтому один из этих 4 циклов while всегда будет истинным.

Существует еще одна проблема: get_float функция возвращает значение с плавающей запятой, в то время как переменная изменения равна int, если бы пользователь ввел значение меньше 1, например .5, оно было бы приведено к 0 и запрашивать снова и снова, пока пользователь не введет значение больше 1. Также обратите внимание, что вы, вероятно, получите неправильный ответ для любого нецелочисленного ввода.

...