Найти минимальное количество монет для выдачи сдачи - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д