|
|
1
23
直接、“临时”解决方案没有错。它也可以足够干净。
编辑
若要更改原始方向,请查看的原始值
|
|
|
2
18
这里是C++中的一个STATION,一个状态迭代器。
应该是最有效率的。 |
|
|
3
11
这是基于上的答案的javascript解决方案 Looping in a spiral
|
|
|
4
7
x,y | dx,dy | k-th corner | N | Sign | ___________________________________________ 1,0 | 1,0 | 1 | 1 | + 1,1 | 0,1 | 2 | 1 | + -1,1 | -2,0 | 3 | 2 | - -1,-1 | 0,-2 | 4 | 2 | - 2,-1 | 3,0 | 5 | 3 | + 2,2 | 0,3 | 6 | 3 | + -2,2 | -4,0 | 7 | 4 | - -2,-2 | 0,-4 | 8 | 4 | -
N = INT((1+k)/2)
Sign = | +1 when N is Odd
| -1 when N is Even
[dx,dy] = | [N*Sign,0] when k is Odd
| [0,N*Sign] when k is Even
[X(k),Y(k)] = [X(k-1)+dx,Y(k-1)+dy]
现在,当你知道了k和k+1螺旋角的坐标后,你可以通过简单地在最后一个点的x或y上加1或-1得到k和k+1之间的所有数据点。 就这样。 祝你好运。 |
|
|
5
7
我会用数学来解决它。下面是Ruby代码(带有输入和输出):
和高尔夫版本:
编辑
注意飞机的第一条对角线
现在关注当前所在线段的长度(当线段的倾斜度发生变化时,螺旋的顶点被视为“下一个”线段的一部分)。它是
这是一个熟悉的推理,如果你习惯了函数式编程:剩下的只是一点点简单的数学。 |
|
|
6
3
可以使用递归以一种相当简单的方式完成。我们只需要一些基本的2D向量数学和工具来生成和映射(可能无限)序列:
现在我们可以通过生成一条平线,再加上一个旋转的(平线,再加上一个旋转的(平线,再加上一个旋转的…)来递归地表示一个螺旋:
也可以取消旋转角度以转到另一个方向,或者使用变换和腿部长度来获得更复杂的形状。
如果你想玩的话,可以把整件事作为一个活片段放在一起:
|
|
|
7
0
尝试搜索参数方程或极坐标方程。两者都适用于绘制螺旋形的东西。 Here's a page 有很多例子,有图片(和方程式)。它应该会给你更多的想法去寻找什么。 |
|
|
8
0
我做的和训练练习差不多,在输出和螺旋方向上有一些不同,还有一个额外的要求,函数的空间复杂度必须是O(1)。 经过一段时间的思考,我想到了这样一个想法:通过知道螺旋从哪里开始,以及我计算值的位置,我可以通过减去螺旋的所有完整“圆”来简化问题,然后只计算一个更简单的值。
这不完全是你要求的,但我相信它会帮助你思考你的问题 |
|
9
0
我也有类似的问题,但我不想每次都在整个螺旋上循环寻找下一个新的坐标。要求你知道你最后的坐标。 以下是我在大量阅读其他解决方案后得出的结论:
仍然不确定这是否是最优雅的解决方案。也许一些优雅的数学可以去掉一些if语句。有些限制是需要修改以更改螺旋方向,不考虑非方形螺旋,并且不能围绕固定坐标螺旋。 |
|
|
10
0
我在java中有一个算法,它可以输出与您类似的输出,只是它先对右边的数字进行优先级排序,然后对左边的数字进行优先级排序。
|
|
|
11
0
这是算法。它顺时针旋转,但可以很容易地逆时针旋转,有一些改变。我只用了不到一个小时。
它将处理任何x/y值(无限)。 它是用GML(Game Maker Language)编写的,但是实际的逻辑在任何编程语言中都是合理的。 对于x和y输入,单线算法只有2个变量(sx和sy)。我基本上扩大了括号,很多。它使您更容易将其粘贴到记事本中,并将“sx”更改为x参数/变量名,“sy”更改为y参数/变量名。
我知道答复太晚了,但我希望它能帮助将来的来访者。 |
|
|
12
0
下面是一个基于@mako的答案的Python实现。
运行此代码:
产量:
|
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 2 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 2 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 2 年前 |