kafinfo КАФЕДРА ІНФОРМАТИКИ

Baner_abiturient_5_prichin

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. Заповніть тестову таблицю за результатами роботи програми:

 

Номер

тесту

N K2 K5
1 3 1 -1
2 1
3 4
4 5
5 6
6 17
7 48
8 109
9 1024
10 50002

 

 

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

 

Відсутність купюри з номіналом 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;
кінець;

 

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

 

Номер

тесту

N K2 K5
1 3 1 -1
2 1 2 -1
3 4 -2 0
4 5 0 -1
5 6 -3 0
6 17 -1 -3
7 48 1 -10
8 109 -2 -21
9 1024 -2 -204
10 50002 1 -10000

 

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

 

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