Задача тижня 2.12.11 – 11.12.11
Поштар
Поштар має доставити телеграму на задану адресу.
1. Створіть програму визначення номеру під’їзду Pd і номеру поверху Pv, де розташована квартира з номером N, якщо будинок має m поверхів і k квартир на кожному поверсі.
Вхідні дані
Значення N, m, k – цілі числа, вводяться з клавіатури.
Вихідні дані
Значення Pd і Pv – цілі числа, виводяться на екран.
2. Заповніть тестову таблицю за результатами роботи програми
| № | N | m | k | Pd | Pv |
| 1 | 12 | 5 | 4 | 1 | 3 |
| 2 | 48 | 6 | 4 | ||
| 3 | 99 | 9 | 2 | ||
| 4 | 128 | 16 | 6 | ||
| 5 | 261 | 24 | 7 |
Аналіз розв’язку задачі «Поштар»
Звичайно, існує декілька способів розв’язання цієї популярної задачі. Проте найбільш раціональний розв’язок можна одержати, помітивши, що номер під’їзду Pd залежить від результату цілочисельного ділення (операція div) заданого номеру квартири N на кількість квартир у під’їзді (k*m), а номер поверху Pv – від результату цілочисельного ділення порядкового номеру квартири в під’їзді на кількість квартир на поверсі k.
Отже, спочатку слід визначити номер під’їзду, потім – поверху.
1. Обчислимо номер під’їзду.
На перший погляд, здається, що можна скористатися формулою:
Pd = N div (k * m)
Але уважний розгляд цієї формули показує, що
а) одержимо результат для нумерації під’їздів, починаючи з нуля, а не з одиниці. Для корекції результату вводимо у вираз доданок 1:
Pd = N div (k * m) + 1;
б) одержимо помилкові результати для останніх квартир в кожному під’їзді, номер яких є кратним (k * m). Для корекції результату зменшуємо на 1 номер квартири, тобто переходимо до їх нумерації, починаючи з нуля. Таким чином, остаточно формула для обчислення номеру під’їзду набуває вигляду:
Pd = (N – 1) div (k * m) + 1,
2. Обчислимо номер поверху.
Очевидно, що порядковий номер квартири N у під’їзді Pd задається виразом:
N – (k * m) * (Рd – 1).
Для обчислення номеру поверху застосовуємо дії, аналогічні п.1, а саме: додаємо до виразу 1, щоб перейти до нумерації поверхів з одиниці, і зменшуємо порядковий номер квартири на 1, щоб уникнути помилок з кожною останньою квартирою на поверсі. Отже, одержуємо таку формулу для обчислення номеру поверху:
Pv = (N – (k * m) * (Рd – 1) – 1) div k + 1
Тестова таблиця з результатами роботи програми має вигляд:
| № | N | m | k | Pd | Pv |
| 1 | 12 | 5 | 4 | 1 | 3 |
| 2 | 48 | 6 | 4 | 2 | 6 |
| 3 | 99 | 9 | 2 | 6 | 5 |
| 4 | 128 | 16 | 6 | 2 | 6 |
| 5 | 216 | 24 | 7 | 2 | 14 |
Результати розв’язку задачі «Поштар»
Журі оцінило надіслані розв’язки наступним чином:
| № | Учасник | Кількість балів |
| 1 | Ивахненко Олег | 1 |
| 2 | ALEX Z | 1 |
| 3 | Kolgatin Andrey | 4 |
| 4 | RomaN | 4 |




