CS50 pset1 Жадный вызов

Мне немного стыдно задавать здесь этот глупый вопрос, но факт в том, что я уже все перепробовал и до сих пор не вижу, где ошибка.

Я 101% нуб в программировании, и я зарегистрировался в CS50. Я пытаюсь извлечь из этого максимум пользы, поэтому всегда беру на себя менее комфортные задачи, чтобы попытаться узнать как можно больше.

Я закончил свой код для Greedy Challenge в pset1 CS50. Я сжал свой разум, чтобы сделать его настолько хорошим, чистым и простым, насколько позволяют мне мои скромные знания, но каждый раз, когда я проверяю свой код, я получаю только одну ошибку.

Настоящим я прилагаю как проверку кода, так и мой код wirtten:

Код проверен терминальным скриптом CS50:

:) greedy.c exists :) greedy.c compiles :) input of 0.41 yields output of 4 :) input of 0.01 yields output of 1 :) input of 0.15 yields output of 2 :) input of 1.6 yields output of 7 :( input of 23 yields output of 92 \ expected output, but not "94\n" :) input of 4.2 yields output of 18 :) rejects a negative input like -.1 :) rejects a non-numeric input of "foo" :) rejects a non-numeric input of ""

Вот мой код:

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

float change;

int coins = 0;
int quantity;

int main (void)
{
do 
{
    printf("O hai! How much change is owed?\n");
    change = get_float();
}
while (change < 0);



//converting float change (dollars) into integer change (cents)

 quantity = round(change * 100.00);



while (quantity > 25) //This runs as long as quantity left is bigger than a quarter coin
{
    quantity -= 25;
    coins++;
}
while (quantity >= 10) //This runs as long as quantity left is bigger than a dime coin
{
    quantity -= 10;
    coins++;
}
while (quantity >= 5) //This runs as long as quantity left is bigger than a nickel coin
{
    quantity -= 5;
    coins++;
    }
while (quantity >= 1) //This runs as long as quantity left is bigger than 0
{
    quantity -= 1;
    coins++;
}


printf("%i\n", coins);
}`

Отказ от ответственности. Я хочу отметить, что прекрасно знаком с Кодексом честности Гарварда. Я не пытаюсь найти простое решение проблемы и просто избавиться от этой проблемы.

Я надеюсь, что кто-нибудь потратит свое время и напишет объяснение, которое просветит меня и поможет понять почему мой код не работает. Я не ищу никакого ответа, и вам не нужно указывать на него, если вы этого не хотите. Я просто неопытный новичок в CS, который готов прочитать все ваши ответы и, наконец, понять, почему то, что должно работать, не работает вообще.

Большое спасибо за ваше терпение и время!


person Togeri    schedule 15.02.2017    source источник
comment
Какой результат вы получаете для 0,25?   -  person Chris Turner    schedule 15.02.2017
comment
1! Прямо сейчас решил! Большое спасибо!   -  person Togeri    schedule 15.02.2017


Ответы (1)


Проблема в самом первом сравнении, которое читается как (quantity > 25). Когда у вас есть крупная сумма в 23 доллара, вы ожидаете 23 * 4 = 92 coins.

Однако, когда вы вычтете 91 из этих четвертаков, вы получите (quantity == 25), и проверка не пройдена (поскольку quantity больше не строго больше, чем 25, но равно ему), толкая вас на 2 десятицентовика. а затем в последний никель, в результате чего отображается 94 монеты.

Исправление (вы уже должны были догадаться) заменить этот чек на (quantity >= 25)

person YePhIcK    schedule 15.02.2017
comment
Ага, понятно!!!! Большое спасибо @YePhIcK!! Я понимаю, где проблема. Очень мягко объяснил! Я очень ценю это! - person Togeri; 15.02.2017