Найти минимальное количество монет для выдачи сдачи - 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.