#algorithm #abstract #pseudocode
#алгоритм #аннотация #псевдокод
Вопрос:
Какой наиболее краткий способ (в псевдокоде) создать следующее отображение f из натуральных чисел в целые числа f(0) = 0; f(1) = 1; f(2) = -1; f(3) = 2; f(4) = -2; f(5) = 3; и т. д
Вы можете представить их как пересечение нуля двойной симметричной архимедовой спирали.
О, и математика с плавающей запятой не допускается! Математика с плавающей запятой была бы … уродливой в этой ситуации.
Ответ №1:
Wolfram Alpha нашел замкнутую форму для вычисления n-го члена напрямую:
Выражение -1 n также может быть записано так, как (n % 2 == 0 ? 1 : -1)
если бы n было положительным целым числом.
Ответ №2:
Не красиво, но однострочный, который работает и не использует условные обозначения:
f(i):
f := (2 * (i mod 2) - 1) * ((i 1) >> 1)
Конечно, с использованием условных выражений он становится более читаемым:
f(i):
if (i mod 2) is
0: f := -((i 1) >> 1)
1: f := ((i 1) >> 1)
Ответ №3:
С помощью C-нотации f(n)
будет n % 2 == 0 ? -n/2 : (n 1)/2
, т.е.:
Если n
четно, то -n/2
, если n
нечетно, то (n 1)/2