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

Объяснение кода листинга программы

  1. В начале программы объявляется переменная типа float summa для хранения введенной пользователем суммы.
  2. Пользователю предлагается ввести сумму, и если введенное значение меньше нуля, программа просит ввести корректное значение.
  3. Введенное значение summa умножается на 100, чтобы перевести его в центы.
  4. Значение summa округляется с помощью функции roundf до ближайшего целого числа и сохраняется в переменной типа int summa2.
  5. Создаются переменные-счетчики для каждого типа монет: quarters (четвертаки), dimes (десятицентовые монеты), nickels (пятицентовые монеты), pennies (одноцентовые монеты) и переменная-счетчик для общего количества монет counter.
  6. В цикле while(summa2 >= 25) происходит подсчет количества четвертаков, уменьшение значения summa2 на 25 и увеличение счетчика counter на 1.
  7. В цикле while(summa2 >= 10) происходит подсчет количества десятицентовых монет, уменьшение значения summa2 на 10, увеличение счетчика counter на 1.
  8. В цикле while(summa2 >= 5) происходит подсчет количества пятицентовых монет, уменьшение значения summa2 на 5, увеличение счетчика counter на 1.
  9. В цикле while(sumма2 >= 1) происходит подсчет количества одноцентовых монет, уменьшение значения summa2 на 1, увеличение счетчика counter на 1.
  10. Выводятся на экран количество использованных монет каждого типа и общее количество монет counter.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5
Похожие ответы