Задача тижня 26.12.11 – 01.01.12
Оптом чи вроздріб?
Спортивна школа закуповує тенісні м’ячі. М’ячі продаються поштучно, наборами по 12 штук та коробками по 12 наборів у кожній. Ціна одного м’яча – 1.05 грн., одного набору – 10.25 грн., однієї коробки – 114 грн.
1. Створіть програму, яка за кількістю N потрібних м’ячів розраховує найбільш вигідний варіант купівлі, тобто обчислює кількість коробок (Pk), наборів (Pn) і окремих м’ячів (Pm), які слід придбати.
Наприклад, замість 11 м’ячів вигідніше купити набір, це обійдеться дешевше.
Вхідні дані
Значення N – невід’ємне ціле число, вводиться з клавіатури.
Вихідні дані
Значення Pk, Pn і Pm – невід’ємні цілі числа, виводяться на екран. н.
2. Заповніть тестову таблицю за результатами роботи програми
| № | N | Pk | Pn | Pm |
| 1 | 11 | 0 | 1 | 0 |
| 2 | 118 | |||
| 3 | 133 | |||
| 4 | 134 | |||
| 5 | 239 |
Аналіз розв’язку задачі «Оптом чи вроздріб?»
Уведемо позначення:
сm – ціна одного м’яча; сn – ціна одного набору; сk – ціна однієї коробки;
Pm – кількість окремих м’ячів; Pn – кількість наборів; Pk – кількість коробок.
З умови задачі зрозуміло, що ціна одного м’яча виходить найменшою, якщо купувати коробку; більшою, якщо купувати набір м’ячів; найбільшою, якщо купувати окремий м’яч.
Алгоритм складається з двох частин – прямого і зворотного ходу.
Прямий хід полягає в тому, щоб розподілити потрібну кількість м’ячів N між коробками (по 144 м’яча в кожній), наборами (по 12 м’ячів у кожному) і окремими м’ячами. Спочатку «заповнюємо» коробки, бо це найвигідніше, потім набори, а решта – окремі м’ячі.
Надамо змінній Pm первісне значення N:
Pm = N;
тоді кількість коробок становить:
Pk = Pm div 144;
кількість м’ячів, що залишилися поза коробками:
Pm = Pm mod 144;
з них утворимо набори, їх кількість становить:
Pn = Pm div 12;
кількість окремих м’ячів, що залишилися поза наборами:
Pm = Pm mod 12;
Отже, ми визначили потрібну кількість коробок Pk, наборів Pn і окремих м’ячів Pm.
Зворотний хід полягає в тому, щоб спробувати зробити нашу покупку ще вигіднішою. Якщо прямим ходом ми просувалися від коробок до окремих м’ячів, то зворотним – навпаки, від окремих м’ячів до коробок.
З’ясуємо спочатку, чи можна замість окремих м’ячів за ту ж ціну або дешевше купити їх набір:
якщо сn <= Pm * cm
то початок Pm = 0; Pn = Pn +1 кінець;
З’ясуємо далі, чи можна замість окремих м’ячів і наборів за ту ж ціну або дешевше купити коробку м’ячів:
якщо сk <= Pm * cm + Pn * сn
то початок Pm = 0; Pn = 0; Pk = Pk +1 кінець;
Тепер найвигідніший варіант покупки знайдено.
Тестова таблиця з результатами роботи програми:
| № | N | Pk | Pn | Pm |
| 1 | 11 | 0 | 1 | 0 |
| 2 | 118 | 0 | 10 | 0 |
| 3 | 133 | 0 | 11 | 1 |
| 4 | 134 | 1 | 0 | 0 |
| 5 | 239 | 1 | 8 | 0 |
Журі оцінило надіслані розв’язки наступним чином:
| № | Учасник | Кількість балів |
| 1 | Юрий Дончик | 4 |
| 2 | Kolgatin Andrey | 4 |
| 3 | RomaN | 4 |
| 4 | ALEX Z | 1 |
| 5 | Макс Синкевич | 1 |
| 6 | forsh3@mail.ru | 1 |




