左右间
source link: https://www.cnblogs.com/MinSentinel/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
2009年1月16日 #
Merzirac 算法。
在第最上面一行居中的方格内放1,依次向右上方填入2、3、4…,如果右上方已有数字,则向下移一格继续填写。如果坐标值超出上限,则归0,如果坐标值超出下限,则变为最大坐标值。
实现:
public static int[,] Generat(int n)
{
int[,] matrix = new int[n, n];
int x = n / 2;
int y = n-1;
int maxNumber = n*n;
for (int i = 1; i <= maxNumber; i++)
{
//修正坐标
x = GetRealPositon(x, n);
y = GetRealPositon(y, n);
if (matrix[x, y] != 0)
{
//到原始方格的正下方方格
x--;
y = y-2;
//修正坐标
x = GetRealPositon(x, n);
y = GetRealPositon(y, n);
//寻找原始方格的正下方中未被附值的方格
while (matrix[x, y] != 0)
{
y--;
y = GetRealPositon(y, n);
}
}
matrix[x, y] = i;
//到右上角
x++;
y++;
}
return matrix;
}
private static int GetRealPositon(int x, int n)
{
if (x < 0)
return n - 1;
else if (x >= n)
return 0;
else
return x;
}
直接的数学公式。
N(I,J)=((I+J+(n-3)/2) MOD n)*n+(I-J+(3*n-1)/2) MOD n +1;
posted @ 2009-01-16 16:51 左右间 阅读(340) 评论(0) 推荐(0) 编辑
2009年1月15日 #
posted @ 2009-01-15 17:41 左右间 阅读(538) 评论(0) 推荐(0) 编辑
2008年9月19日 #
posted @ 2008-09-19 14:22 左右间 阅读(6706) 评论(1) 推荐(0) 编辑
2008年8月31日 #
posted @ 2008-08-31 21:06 左右间 阅读(189) 评论(0) 推荐(0) 编辑
2008年8月8日 #
posted @ 2008-08-08 13:44 左右间 阅读(1412) 评论(0) 推荐(0) 编辑
2008年8月2日 #
posted @ 2008-08-02 18:19 左右间 阅读(380) 评论(0) 推荐(0) 编辑
2008年8月1日 #
posted @ 2008-08-01 14:27 左右间 阅读(1391) 评论(0) 推荐(0) 编辑
2008年7月30日 #
posted @ 2008-07-30 11:12 左右间 阅读(1768) 评论(0) 推荐(0) 编辑
2008年7月28日 #
posted @ 2008-07-28 11:32 左右间 阅读(183) 评论(0) 推荐(0) 编辑
2008年5月29日 #
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK