public static int[,] myMainStep(int n)
{
int[,] mymainRect = new int[n, n];
int count = 0;
int step = n;
//对角线
for (int m = 0; m < n; m++)
{
count++;
mymainRect[m, m] = count;
}
step--;
for (int i = n - 1; i > 0; i--)
{
//左下 往左
for (int j = 0; j < step; j++)
{
count++;
mymainRect[i, i - j - 1] = count;
}
step--;
//左下往上
for (int k = 0; k < step; k++)
{
count++;
mymainRect[i - k - 1, i - step - 1] = count;
}
step++;
//右上往右
for (int p = 0; p < step; p++)
{
count++;
mymainRect[n - i - 1, n - i - 1 + p + 1] = count;
}
step--;
//右上往下
for (int q = 0; q < step; q++)
{
count++;
mymainRect[n - i - 1 + q + 1, n - i - 1 + step + 1] = count;
}
step--;
}
return mymainRect;
}
这样
有点复杂,1-5和其它的规律似乎不一致
从5开始,根据下标考虑,如果横坐标>=5,那么纵坐标变为--,横坐标保持4;如果纵坐标<0,那么纵坐标保持为0,横坐标--,如果横坐标<0,则横坐标保持为0,纵坐标++,如果纵坐标>=5,那么纵坐标保持为4,横坐标++
如果下一个格已经有数据,那么往顺时针方向找个空的,这里从19找到20有点啰嗦。
1 22 23 24 25 26 27 28
21 2 44 45 46 47 48 29
20 43 3 58 59 60 49 30
19 42 57 4 64 61 50 31
18 41 56 63 5 62 51 32
17 40 55 54 53 6 52 33
16 39 38 37 36 35 7 34
15 14 13 12 11 10 9 8
这样对吗?
1 22 23 24 25 26 27 28
21 2 44 45 46 47 48 29
20 43 3 58 59 60 49 30
19 42 57 4 64 61 50 31
18 41 56 63 5 62 51 32
17 40 55 54 53 6 52 33
16 39 38 37 36 35 7 34
15 14 13 12 11 10 9 8