Кафедра інформатики

Харківський національний педагогічний університет імені Г.С. Сковороди

Кафедра інформатики

Харківський національний педагогічний університет імені Г.С. Сковороди

Задача тижня 2011

Задача тижня 26.12.11 – 01.01.12

Zadacha_tyzhnya_khopka_zadacha_tyzhnyaZadacha_tyzhnya_khopka_2_analiz_rezultativZadacha_tyzhnya_khopka_3_reytyngZadacha_tyzhnya_khopka_4_arhiv

 

Оптом чи вроздріб?

 

Спортивна школа закуповує тенісні м’ячі. М’ячі продаються поштучно, наборами по 12 штук та коробками по 12 наборів у кожній. Ціна одного м’яча – 1.05 грн., одного набору – 10.25 грн., однієї коробки – 114 грн.

1. Створіть програму, яка за кількістю N потрібних м’ячів розраховує найбільш вигідний варіант купівлі, тобто обчислює кількість коробок (Pk), наборів (Pn) і окремих м’ячів (Pm), які слід придбати.

Наприклад, замість 11 м’ячів вигідніше купити набір, це обійдеться дешевше.

Вхідні дані

Значення N – невід’ємне ціле число, вводиться з клавіатури.

Вихідні дані

Значення Pk, Pn і Pm – невід’ємні цілі числа, виводяться на екран. н.

2. Заповніть тестову таблицю за результатами роботи програми

 

NPk Pn Pm
111010
2118
3133
4134
5239

 

Аналіз розв’язку задачі «Оптом чи вроздріб?»

 

Уведемо позначення:

с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 кінець;

Тепер найвигідніший варіант покупки знайдено.

Тестова таблиця з результатами роботи програми:

 

NPkPnPm
111010
21180100
31330111
4134100
5239180

 

Журі оцінило надіслані розв’язки наступним чином:

 

Учасник Кількість балів
1Юрий Дончик4
2Kolgatin Andrey4
3RomaN4
4ALEX Z1
5Макс Синкевич1
6forsh3@mail.ru1