枚举特定螺旋的零交叉的最简洁方法
创建以下从自然数到整数的映射 f 的最简洁方法(以伪代码)是什么 f(0) = 0; f(1) = 1; f(2) = -1; f(3) = 2; f(4) = -2; f(5) = 3; 等等
您可以将它们想象为双对称阿基米德螺旋的零交叉点。
哦,不允许使用浮点数学!在这种情况下,浮点数学会......很难看。
What is the most succinct way (in pseudocode) to create the following map f from the naturals to the integers
f(0) = 0;
f(1) = 1;
f(2) = -1;
f(3) = 2;
f(4) = -2;
f(5) = 3;
etc
You can imagine them as the zero crossing of a double symmetric Archimedean spiral.
Oh, and no float math allowed! Float math would be... ugly in this situation.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Wolfram Alpha 找到了直接计算第 nth 项的封闭形式:
这如果 n 是正整数,则表达式 -1n 也可以写为
(n % 2 == 0 ? 1 : -1)
。Wolfram Alpha found a closed form for calculating the nth term directly:
The expression -1n can also be written as
(n % 2 == 0 ? 1 : -1)
if n is a positive integer.不太漂亮,但是一行行代码可以工作并且不使用条件:
当然,使用条件,它会变得更具可读性:
Not pretty, but an one-liner that works and doesn't use conditionals:
Of course, using conditionals, it gets more readable:
使用 C 表示法,
f(n)
将是n % 2 == 0 ? -n/2 :(n+1)/2
,即:如果
n
是偶数则-n/2
,如果n
code> 是奇数则(n+1)/2
With C-notation,
f(n)
will ben % 2 == 0 ? -n/2 : (n+1)/2
, i.e.:If
n
is even then-n/2
, ifn
is odd then(n+1)/2