Розглянемо процес:
Беручи невід’ємне ціле число Н.
напр27
.Розбивши їх на цілі числа
N - floor(N/2)
таfloor(N/2)
(«більша» та «менша» половина) та записуючи їх у такому порядку.
наприклад27
стає14 13
.Вилучення місця для приєднання цілих чисел до нового, набагато більшого цілого числа.
наприклад14 13
стає1413
.Повторюючи кроки 2 і 3 деяку бажану кількість разів.
наприклад1413
→707 706
→707706
→353853 353853
→353853353853
→ → ...
Ця задача полягає в тому, щоб зробити саме це, але не завжди в базі 10.
Виклик
Напишіть програму, яка містить три числа, B, N і S:
B - ціле число від 2 до 10, яке є базовою N (двійкове до десяткового).
N - це від'ємне ціле число, до якого слід застосувати процес розщеплення-з'єднання. Щоб полегшити введення користувача, він подається як рядок в базі B, а не ціле число.
S - це від'ємне ціле число, яке кількість разів повторює процес розщеплення-з'єднання.
Результатом програми є рядкове представлення N в базі B після S роздільних процедур з'єднання.
Коли S є 0
, розщеплення не робиться, тому вихід завжди N.
Коли N є 0
, всі розщеплення мають вигляд 0 0
і зменшуються до 0
знову, тому вихід завжди є 0
.
Приклади
B = 10, N = 27, S = 1
→1413
B = 10, N = 27, S = 2
→707706
B = 9, N = 27, S = 1
→1413
B = 9, N = 27, S = 2
→652651
B = anything, N = anything, S = 0
→N
B = anything, N = 0, S = anything
→0
Таблиця для всіх B з N = 1
для S = 0
до 7
:
B S=0 S=1 S=2 S=3 S=4 S=5 S=6 S=7
2 1 10 11 101 1110 111111 10000011111 10000100001000001111
3 1 10 21 1110 202201 101101101100 1201201201212012012011 212100212102121002121212100212102121002120
4 1 10 22 1111 223222 111311111311 2232222232322322222322 11131111131311311111311113111113131131111131
5 1 10 32 1413 432431 213441213440 104220331443104220331442 2433241322130211014044424332413221302110140443
6 1 10 33 1514 535535 245550245545 122553122553122553122552 4125434125434125434125441254341254341254341254
7 1 10 43 2221 11111110 40404044040403 2020202202020220202022020201 10101011010101101010110101011010101101010110101011010100
8 1 10 44 2222 11111111 44444454444444 2222222622222222222226222222 11111113111111111111131111111111111311111111111113111111
9 1 10 54 2726 13581357 62851746285173 3142536758708231425367587081 15212633743485606571782880411521263374348560657178288040
10 1 10 55 2827 14141413 70707077070706 3535353853535335353538535353 17676769267676676767692676771767676926767667676769267676
Таблиця для всіх B з випадковим N для S = 0
до 3
:
B S=0 S=1 S=2 S=3
2 11011 11101101 11101111110110 11101111110111110111111011
3 2210 11021101 20102012010200 1001212100121210012121001211
4 1113 230223 112112112111 2302302302323023023022
5 101 2323 11341134 31430423143042
6 120 4040 20202020 1010101010101010
7 134 5252 24612461 1230456412304564
8 22 1111 445444 222622222622
9 4 22 1111 505505
10 92 4646 23232323 1161616211616161
Деталі
- Візьміть вхід через stdin або командний рядок. Вихід у stdout.
- Замість програми ви можете написати функцію, яка приймає B, N і S і друкує результат нормально або повертає його (як рядок).
- B, N і S можуть прийматися в будь-якому порядку.
- Усі входи, які дають результати, десятичні значення яких не перевищують 2 32, повинні працювати.
- N представлений звичайним чином. тобто найзначніша цифра першої і не має провідних нулів, за винятком самого нуля, який записаний
0
. (Виведення00
замість0
недійсного.) - Виграє найкоротший код у байтах.
Якщо вам подобаються мої виклики, подумайте про те, щоб подарувати Block Building Bot Flocks! якась любов :)