Какую минимальную сумму нужно истратить для покупки N дисков при данных ценах? - C (СИ)
Формулировка задачи:
Проблема с задачей.
Чистые компакт-диски продают в трёх видах упаковок. Упаковка из 100 дисков стоит 100 грн., из 20 дисков - 30 грн., а один диск стоит 2 грн. Какую минимальную сумму нужно истратить для покупки N таких дисков?
Технические условия
Входные данные
Единственное число N - количество дисков. Значение N натуральное, не больше 1000.
Выходные данные
Искомая минимальная сумма в гривнах.
Код выглядит так.
Скажите, что я делаю неправильно?
#include <stdio.h>
int main() {
int N, pr = 0;
scanf("%d", &N);
while(N > 0) {
if(N >= 100 && N <= 1000) {
pr = pr + 100;
N = N - 100;
}
if(N >= 20 && N < 100) {
pr = pr + 30;
N = N -20;
}
if(N > 0 && N < 20) {
pr = pr + 2;
N = N - 1;
}
}
printf("%d\n", pr);
return 0;
}Решение задачи: «Какую минимальную сумму нужно истратить для покупки N дисков при данных ценах?»
textual
Листинг программы
#include <stdio.h>
int main(void) {
unsigned n;
while ( printf("How many CD you need? ") && scanf("%u", &n) == 1 && n )
printf("Get ready to pay %u money.\n", ( n / 100 * 100 ) + ( n % 100 / 20 * 30 ) + ( n % 100 % 20 * 2 ));
return 0;
}
Объяснение кода листинга программы
Вот что делается в этом коде:
- unsigned n; Это объявление переменной типа unsigned (беззнаковое целое число), которая называется n. Она будет использоваться для подсчёта количества необходимых дисков.
- while ( printf(
How many CD you need?) && scanf(%u, &n) == 1 && n ) Это цикл while, который будет выполняться до тех пор, пока:- функция printf успешно выводит сообщение
How many CD you need?(Как много вам нужно дисков?) - функция scanf успешно считывает целочисленное значение (без знака) в переменную n
- переменная n не равна нулю
- функция printf успешно выводит сообщение
- *printf(
Get ready to pay %u money.\n, ( n / 100 100 ) + ( n % 100 / 20 30 ) + ( n % 100 % 20 2 ));** Это функция printf, которая выводит сообщениеGet ready to pay [сумма] money.(Приготовьтесь заплатить [сумма] денег.), где [сумма] - это вычисленное значение:- сначала вычисляется количество денег, которое нужно заплатить за 100 единиц товара (n / 100 * 100)
- затем вычисляется количество денег, которое нужно заплатить за остаток от 100 единиц товара (n % 100 / 20 * 30)
- наконец, вычисляется количество денег, которое нужно заплатить за остаток от остатка от 100 единиц товара (n % 100 % 20 * 2)
- return 0; Это функция main(), которая возвращает 0, указывая, что программа успешно завершилась.