Найти минимальное количество монет для выдачи сдачи - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Пожалуйста, помогите найти ошибку! Программа ищет минимальное кол-во монет, для выдачи сдачи. У меня в Dev C++ выдает очень большие числа. Ошибки смотрю но нигде выловить не могу... Если можно как-то оптимизировать алгоритм, буду благодарен.
Листинг программы
  1. #include <stdio.h>
  2. main()
  3. {
  4. int a, i, j, k, l, m, n;
  5. printf("vvedite summu: ");
  6. scanf("%d", &a);
  7. while(a - 50 >= 0)
  8. {
  9. a-=50;
  10. i++;
  11. }
  12. while(a - 25 >= 0)
  13. {
  14. a-=25;
  15. j++;
  16. }
  17. while(a - 10 >= 0)
  18. {
  19. a-=10;
  20. k++;
  21. }
  22. while(a-5 >= 0)
  23. {
  24. a-=5;
  25. l++;
  26. }
  27. while(a-2 >= 0)
  28. {
  29. a-=2;
  30. m++;
  31. }
  32. while(a-1 >= 0)
  33. {
  34. a-=5;
  35. n++;
  36. }
  37. printf("%d %d %d %d %d %d",i, j, k, l, m, n);
  38. system("PAUSE");
  39. }

Решение задачи: «Найти минимальное количество монет для выдачи сдачи»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <cs50.h>
  3. #include <math.h>
  4.  
  5. int main(void)
  6. {
  7.     // объявить переменную типа float
  8.     float summa;
  9.  
  10.     // получить ввод от пользователя
  11.     // если зачение меньше нуля, спрашивать повторно, пока не получит правильный ответ
  12.     do
  13.     {
  14.         printf("Введите сумму: ");
  15.         summa = GetFloat();
  16.     }
  17.     while (summa < 0);
  18.    
  19.     // так как вклад в в долларах, умножить на 100, чтобы получить центы
  20.     summa = summa * 100;
  21.     // округлить значение "summa" с плавающей запятой, до ближайшего целого
  22.     summa = roundf(summa);
  23.    
  24.     // изменить float "summa" в integer "summa"
  25.     int summa2 = (int) summa;
  26.     // создать переменные счетчика для каджой монеты
  27.     int quarters = 0;
  28.     int dimes = 0;
  29.     int nickels = 0;
  30.     int pennies = 0;
  31.     // и переменную счетчика для общего количества монет
  32.     int counter = 0;
  33.    
  34.     // пока сумма >= 25c
  35.     while(summa2 >= 25)
  36.     {
  37.         // уменьшить на 25c
  38.         summa2 = summa2 - 25;
  39.         // увеличить счетчик на 1
  40.         quarters = quarters + 1;
  41.         counter++;
  42.     }
  43.    
  44.     while(summa2 >= 10)
  45.     {
  46.        
  47.         summa2 = summa2 - 10;
  48.        
  49.         dimes = dimes + 1;
  50.         counter++;
  51.     }
  52.    
  53.     while(summa2 >= 5)
  54.     {
  55.        
  56.         summa2 = summa2 - 5;
  57.        
  58.         nickels = nickels +1;
  59.         counter++;
  60.     }
  61.    
  62.     while(summa2 >= 1)
  63.     {
  64.        
  65.         summa2 = summa2 - 1;
  66.                
  67.         pennies = pennies + 1;
  68.         counter++;
  69.     }
  70.     // вывести на экран используемое количество монет
  71.     printf("Quarters: %d\nDimes: %d\nNickels: %d\nPennies: %d\n\n", quarters, dimes, nickels, pennies);
  72.     printf("All coins:%d\n", counter);
  73. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы