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

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

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

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

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

Задача тижня 12.11.12 – 18.11.12

Zadacha_tyzhnya_khopka_zadacha_tyzhnyaZadacha_tyzhnya_khopka_2_analiz_rezultativZadacha_tyzhnya_khopka_3_reytyngZadacha_tyzhnya_khopka_4_arhiv

 

Найшвидший розрахунок

 

У країні дурнів фінансові розрахунки здійснюються з використанням місцевої валюти – дургриків, при чому застосовуються купюри тільки двох номіналів: у 2 дургрики і в 5 дургриків. Під час проведення розрахунку кожну купюру, яку передають платник або касир один одному, піддають ретельній і тривалій експертизі, тому витрати часу на розрахунок залежать від сумарної кількості використовуваних у його процесі купюр.

1. Створіть програму, яка допомагає покупцю здійснити платіж N дургриків за мінімальний час.

Вхідні дані

Значення N (сума в дургриках, яку потрібно сплатити) – натуральне число, що не перевищує 1000000

Вихідні дані

Значення K2, K5 (кількості купюр номіналом 2 і 5 дургриків, відповідно, які передає (якщо значення від’ємне) або отримує (якщо значення додатне) платник, – цілі числа, виводяться на екран.

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

 

Номер

тесту

NK2K5
131-1
21
34
45
56
617
748
8109
91024
1050002

 

 

Аналіз розв’язку задачі «Найшвидший розрахунок»

 

Відсутність купюри з номіналом 1 дургрик створює суттєві проблеми мешканцям країни дурнів.

На перший погляд здається, що простим перебором можна визначити оптимальний спосіб розрахунків для суми від 1 до 10 дургриків. Але здобуті висновки не можуть бути поширені на суми більше 10 дургриків без доведення. Деякі автори не врахували у своїх розв’язках, що оптимальні розрахунки для сум 11, 21, 31 тощо відрізняються від простого поєднання оптимальних розрахунків для сум в 1 та 10 дургриків (такі тести не були запропоновані в тестовій таблиці). Дивиться 11=(5+5)+(5-2-2) потребує більше перевірок купюр ніж 11=5+2+2+2.

 

На нашу думку, найбільш прозорим є наступний підхід до розв’язку задачі:

1. Визначимо, скільки купюр номіналом 5 є складовими потрібної суми:

K5=N div 5;

Залишається:

N1=N mod 5;

2. Визначимо, скільки купюр номіналом 2 можна додати:

K2 = N1 div 2;

Залишається:

N1=N1 mod 2;

3. Якщо залишилось сплатити ще 1 дургрик (N1=1), то потрібно сплатити 5 і отримати решту 2+2, розрахунок буде правильним, але не завжди оптимальним – доцільно замінити послідовність 5+5-2-2 (якщо така послідовність існує) на послідовність 2+2+2:

K5 = -N1 – K5;
K2 = N1 * 2 – K2;

якщо (K5 <= -2) and (K2 >= 2)

то
початок
K5 = K5 + 2;
K2 = K2 – 5;
кінець;

 

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

 

Номер

тесту

NK2K5
131-1
212-1
34-20
450-1
56-30
617-1-3
7481-10
8109-2-21
91024-2-204
10500021-10000

 

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

 

УчасникКількість балів
1Sergey Shablenko3
2Антон Мишенин2
3Vitas Vitas
3
(тестова таблиця учасника є правильною,
але для N=2, 4, 6 програма виводить на екран два
варіанти розрахунку й не вирішує, який з них потрібно обрати)
4Юрий Дончик4
5Ивахненко Олег4
6RomaN3
7Сергій Сальніков4