输入3 输出
1
6 2
5 4 3
输入4 输出
1
9 2
8 10 3
7 6 5 4
刚写的C#的,回形矩阵的
算法一样的,取一半就行
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;
}
主要是你要找到规律,每行的最后一个是行号,然后是最后一行开始从右到左,从下到上按顺序打印就可以 了
创建一个二维数组,跑一边双重循环赋值,最后把数组按需要打印出来。
实在想不到控制条件你就干脆把下标依次列出来然后找规律