Algorithm 枚举特定螺旋的过零点的最简洁的方法
在伪代码中,创建以下从自然数到整数的映射f最简洁的方法是什么 f(0)=0; f(1)=1; f(2)=-1; f(3)=2; f(4)=-2; f(5)=3; 等 你可以把它们想象成双对称阿基米德螺线的零交点 哦,不允许浮动数学!浮动数学将是。。。在这种情况下很难看。找到了一种直接计算第n项的封闭形式: 如果n是正整数,表达式-1n也可以写成Algorithm 枚举特定螺旋的过零点的最简洁的方法,algorithm,abstract,pseudocode,Algorithm,Abstract,Pseudocode,在伪代码中,创建以下从自然数到整数的映射f最简洁的方法是什么 f(0)=0; f(1)=1; f(2)=-1; f(3)=2; f(4)=-2; f(5)=3; 等 你可以把它们想象成双对称阿基米德螺线的零交点 哦,不允许浮动数学!浮动数学将是。。。在这种情况下很难看。找到了一种直接计算第n项的封闭形式: 如果n是正整数,表达式-1n也可以写成(n%2==0?1:-1)。找到了一个用于直接计算第n项的闭合形式: 如果n是一个正整数,表达式-1n也可以写成(n%2==0?1:-1)。不漂亮,但
(n%2==0?1:-1)
。找到了一个用于直接计算第n项的闭合形式:
如果n是一个正整数,表达式-1n也可以写成
(n%2==0?1:-1)
。不漂亮,但它是一个有效且不使用条件的一行程序:
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)
不漂亮,但是一行代码可以工作并且不使用条件:
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)
使用C表示法,f(n)
将是n%2==0-n/2:(n+1)/2
,即:
如果n
是偶数,那么-n/2
,如果n
是奇数,那么(n+1)/2
用C表示法,f(n)
将是n%2==0-n/2:(n+1)/2
,即:
如果n
为偶数,则-n/2
,如果n
为奇数,则(n+1)/2