php中的矩阵排列问题
我想知道解决此类问题的一些方法。
它被赋予一个数字,比如说 16,你必须以这种方式排列一个矩阵
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
,语言无关紧要(最好是 PHP);
I would like to know some solutions to such a problem.
It is given a number lets say 16 and you have to arrange a matrix this way
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
the language doesn't matter, (preferably PHP);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
[编辑:更新] 如果语言不重要:
转到:http://rosettacode.org/ wiki/Spiral_matrix
在 PHP 中:
在这里:
[EDIT: Update] If language doesn't matter:
Go to: http://rosettacode.org/wiki/Spiral_matrix
In PHP:
Here you go:
在Python中:
In python:
看来贪吃蛇游戏可能会成功。跟踪方向矢量,每次碰到边或有人居住的方块时,右转 90 度。尾巴一直无限延伸:)
编辑:C# 中的 Snakey v0.1。也适用于非方形网格;)
Looks like the snake game might work. Track a direction vector, and turn right 90 degrees every time you hit a side or a populated square. The tail keeps extending indefinitely :)
Edit : Snakey v0.1 in C#. Works for non square grids too ;)
好吧,我只是为了好玩而发布这个答案。
其他解决方案使用变量来迭代地积累信息。我想尝试一种功能解决方案,其中可以知道任何表格单元格的编号(或者任何数字的表格单元格),而无需迭代任何其他单元格。
这是 JavaScript 中的。我知道,这不是纯粹的函数式编程,也不是非常优雅,但是每个表格单元格的数字的计算是在不参考先前迭代的情况下完成的。所以它是多核友好的。
现在我们只需要有人用 haskell 来做这件事。 ;-)
顺便说一句,这是在评论之前写的,即 1 应该最终位于不一定是西北角的某个位置(目前尚未指定)。
由于有人提到了乌拉姆螺旋,只是为了好玩,我添加了代码,在素数周围放置了红色边框(即使螺旋是由内向外的)。有趣的是,似乎确实存在质数的对角条纹,尽管我不知道它是否与随机奇数得到的条纹有显着不同。
代码:
练习它的 HTML 页面:
OK, I'm just posting this answer for fun.
The other solutions use variables to accumulate information iteratively. I wanted to try a functional solution, where the number of any table cell (or alternatively, the table cell for any number) could be known without iterating through any others.
Here it is in javascript. I know, it's not pure functional programming, nor is it extremely elegant, but the computation of the number for each table cell is done without reference to prior iterations. So it's multi-core friendly.
Now we just need somebody to do it in haskell. ;-)
BTW this was written before the comment that the 1 should end up in a certain location that is not necessarily the northwest corner (still unspecified as of now).
Since somebody mentioned the Ulam spiral, just for kicks I added code to put a red border around the primes (even though the spiral is inside out). Interestingly enough, there do seem to be diagonal streaks of primes, though I don't know if it's significantly different from the streaks you'd get with random odd numbers.
The code:
The HTML page to exercise it:
在java中
in java
在 PHP 中,但带有递归。您可以通过指定边长来设置要填充的方框的大小。
其工作方式是函数最初填充指定数组位置的值。然后它尝试继续朝原来的方向移动。如果不能,则顺时针旋转 90 度。如果没有剩余的动作,它就会停止。这是通过
direction
变量和递归的switch()
语句来处理的。这可以很容易地适应矩形网格(只需为边长指定 2 个常数而不是 1)。
8x8 的实时示例 和您的4x4
代码:
In PHP, but with recursion. You can set the size of the square box to be filled by specifying the length of a side.
The way this works is that the function initially fills in the value at the array location specified. Then it tries to keep moving in the direction it was moving. If it can't, it turns clockwise 90 degrees. If there are no moves left, it stops. This is handled with a
switch()
statement for thedirection
variable and recursion.This can be adapted to rectangular shaped grids quite easily (just specify 2 constants instead of 1 for the side lengths).
Live Example with an 8x8 and your 4x4
The code: