Розглянемо таку послідовність чисел:
Він перераховує всі двійкові дроби в одиничному інтервалі .
(Щоб полегшити цей виклик, перший елемент необов’язковий: ви можете пропустити його і вважати, що послідовність починається з 1/2.)
Завдання
Напишіть програму (повну програму або функцію), яка ...
Виберіть одну з таких форм поведінки:
- Введення n, вихід n-го елемента послідовності (0-індексований або 1-індексований);
- Введення n, вихід перших n елементів послідовності;
- Нічого не вводьте, виведіть нескінченну послідовність чисел, яку ви можете взяти один за одним;
Правило
- Ваша програма повинна підтримувати хоча б перші 1000 елементів;
- Ви можете обрати десяткові знаки або дроби (вбудована ціла пара, рядки), як вам подобається;
- Введення / вихід як двійкові цифри у цьому запиті заборонено;
- Це код-гольф , найкоротший виграш кодів;
- Стандартні лазівки заборонені.
Тестові шафи
input output
1 1/2 0.5
2 1/4 0.25
3 3/4 0.75
4 1/8 0.125
10 5/16 0.3125
100 73/128 0.5703125
511 511/512 0.998046875
512 1/1024 0.0009765625
Ці приклади ґрунтуються на 0-індексованій послідовності з включеною першою 0. Вам потрібно буде відрегулювати вхід для відповідного рішення.
Детальніше
- OEIS A006257
- Завдання Йосифа: . (Раніше M2216)
- 0, 1, 1, 3, 1, 3, 5, 7, 1, 3, 5, 7, 9, 11, 13, 15, 1, 3, 5, ...
- OEIS A062383
- : при n > 0 , a n = 2 ⌊ l o g 2 n + 1 ⌋ або a n = 2 a ⌊ n.
- 1, 2, 4, 4, 8, 8, 8, 8, 16, 16, 16, 16, 16, 16, 16, 16, 32, 32, 32, ...
A006257 (n) / A062383 (n) = (0, 0,1, 0,01, 0,11, 0,001, ...) перераховує всі двійкові дроби в одиничному інтервалі [0, 1). - Фредрік Йохансон, 14 серпня 2006 року
"1/2" "1/4" "1/8"...
take
пізніше отримати елементи з нього.
int
, або a double
в мові / реалізації, де double
використовується формат IEEE binary64 ? Я сподіваюся, ви не маєте на увазі, чи потрібно було проаналізувати рядок ASCII, якщо ми хочемо взяти цілий вхід? Нормальні цілі типи є двійковими мовами, такими як C. Або ви маєте на увазі, що введення / вихід не може бути масивом або рядком цілих чи ASCII нулів / одиниць?