Найти минимальное количество монет для выдачи сдачи - C (СИ)
Формулировка задачи:
Пожалуйста, помогите найти ошибку! Программа ищет минимальное кол-во монет, для выдачи сдачи. У меня в Dev C++ выдает очень большие числа. Ошибки смотрю но нигде выловить не могу... Если можно как-то оптимизировать алгоритм, буду благодарен.
Листинг программы
- #include <stdio.h>
- main()
- {
- int a, i, j, k, l, m, n;
- printf("vvedite summu: ");
- scanf("%d", &a);
- while(a - 50 >= 0)
- {
- a-=50;
- i++;
- }
- while(a - 25 >= 0)
- {
- a-=25;
- j++;
- }
- while(a - 10 >= 0)
- {
- a-=10;
- k++;
- }
- while(a-5 >= 0)
- {
- a-=5;
- l++;
- }
- while(a-2 >= 0)
- {
- a-=2;
- m++;
- }
- while(a-1 >= 0)
- {
- a-=5;
- n++;
- }
- printf("%d %d %d %d %d %d",i, j, k, l, m, n);
- system("PAUSE");
- }
Решение задачи: «Найти минимальное количество монет для выдачи сдачи»
textual
Листинг программы
- #include <stdio.h>
- #include <cs50.h>
- #include <math.h>
- int main(void)
- {
- // объявить переменную типа float
- float summa;
- // получить ввод от пользователя
- // если зачение меньше нуля, спрашивать повторно, пока не получит правильный ответ
- do
- {
- printf("Введите сумму: ");
- summa = GetFloat();
- }
- while (summa < 0);
- // так как вклад в в долларах, умножить на 100, чтобы получить центы
- summa = summa * 100;
- // округлить значение "summa" с плавающей запятой, до ближайшего целого
- summa = roundf(summa);
- // изменить float "summa" в integer "summa"
- int summa2 = (int) summa;
- // создать переменные счетчика для каджой монеты
- int quarters = 0;
- int dimes = 0;
- int nickels = 0;
- int pennies = 0;
- // и переменную счетчика для общего количества монет
- int counter = 0;
- // пока сумма >= 25c
- while(summa2 >= 25)
- {
- // уменьшить на 25c
- summa2 = summa2 - 25;
- // увеличить счетчик на 1
- quarters = quarters + 1;
- counter++;
- }
- while(summa2 >= 10)
- {
- summa2 = summa2 - 10;
- dimes = dimes + 1;
- counter++;
- }
- while(summa2 >= 5)
- {
- summa2 = summa2 - 5;
- nickels = nickels +1;
- counter++;
- }
- while(summa2 >= 1)
- {
- summa2 = summa2 - 1;
- pennies = pennies + 1;
- counter++;
- }
- // вывести на экран используемое количество монет
- printf("Quarters: %d\nDimes: %d\nNickels: %d\nPennies: %d\n\n", quarters, dimes, nickels, pennies);
- printf("All coins:%d\n", counter);
- }
Объяснение кода листинга программы
- В начале программы объявляется переменная типа float
summa
для хранения введенной пользователем суммы. - Пользователю предлагается ввести сумму, и если введенное значение меньше нуля, программа просит ввести корректное значение.
- Введенное значение
summa
умножается на 100, чтобы перевести его в центы. - Значение
summa
округляется с помощью функции roundf до ближайшего целого числа и сохраняется в переменной типа intsumma2
. - Создаются переменные-счетчики для каждого типа монет: quarters (четвертаки), dimes (десятицентовые монеты), nickels (пятицентовые монеты), pennies (одноцентовые монеты) и переменная-счетчик для общего количества монет
counter
. - В цикле while(summa2 >= 25) происходит подсчет количества четвертаков, уменьшение значения
summa2
на 25 и увеличение счетчикаcounter
на 1. - В цикле while(summa2 >= 10) происходит подсчет количества десятицентовых монет, уменьшение значения
summa2
на 10, увеличение счетчикаcounter
на 1. - В цикле while(summa2 >= 5) происходит подсчет количества пятицентовых монет, уменьшение значения
summa2
на 5, увеличение счетчикаcounter
на 1. - В цикле while(sumма2 >= 1) происходит подсчет количества одноцентовых монет, уменьшение значения
summa2
на 1, увеличение счетчикаcounter
на 1. - Выводятся на экран количество использованных монет каждого типа и общее количество монет
counter
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д