一个旋转矩阵问题同学给了我一个题目就是输入一个正整数n 比如n=4输出一个n*n的矩阵如下 1 2 3 412 13 14 511 16 15 610 9 8 7这个应该怎么写呢……
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/28 17:15:51
![一个旋转矩阵问题同学给了我一个题目就是输入一个正整数n 比如n=4输出一个n*n的矩阵如下 1 2 3 412 13 14 511 16 15 610 9 8 7这个应该怎么写呢……](/uploads/image/z/11473914-66-4.jpg?t=%E4%B8%80%E4%B8%AA%E6%97%8B%E8%BD%AC%E7%9F%A9%E9%98%B5%E9%97%AE%E9%A2%98%E5%90%8C%E5%AD%A6%E7%BB%99%E4%BA%86%E6%88%91%E4%B8%80%E4%B8%AA%E9%A2%98%E7%9B%AE%E5%B0%B1%E6%98%AF%E8%BE%93%E5%85%A5%E4%B8%80%E4%B8%AA%E6%AD%A3%E6%95%B4%E6%95%B0n+%E6%AF%94%E5%A6%82n%3D4%E8%BE%93%E5%87%BA%E4%B8%80%E4%B8%AAn%2An%E7%9A%84%E7%9F%A9%E9%98%B5%E5%A6%82%E4%B8%8B+1+2+3+412+13+14+511+16+15+610+9+8+7%E8%BF%99%E4%B8%AA%E5%BA%94%E8%AF%A5%E6%80%8E%E4%B9%88%E5%86%99%E5%91%A2%E2%80%A6%E2%80%A6)
一个旋转矩阵问题同学给了我一个题目就是输入一个正整数n 比如n=4输出一个n*n的矩阵如下 1 2 3 412 13 14 511 16 15 610 9 8 7这个应该怎么写呢……
一个旋转矩阵问题
同学给了我一个题目就是输入一个正整数n 比如n=4
输出一个n*n的矩阵如下
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
这个应该怎么写呢……
一个旋转矩阵问题同学给了我一个题目就是输入一个正整数n 比如n=4输出一个n*n的矩阵如下 1 2 3 412 13 14 511 16 15 610 9 8 7这个应该怎么写呢……
递归写法,理论上有输入上限,不过一般也不会有那么大的输入
没有处理格式,没有处理输入,只写了算法...
class Program
{
private static void Fill(int[,] matrix,Direction direction,int start,
int rows,int cols,int rowOffset,int colOffset)
{
if (rows == 0 || cols == 0) return;
switch (direction)
{
case Direction.Left:
for (int n = cols; n > 0; )
matrix[rowOffset + rows - 1,colOffset + --n] = ++start;
Fill(matrix,Direction.Up,start,rows - 1,cols,rowOffset,colOffset);
break;
case Direction.Right:
for (int n = 0; n < cols; ++n)
matrix[rowOffset,colOffset + n] = ++start;
Fill(matrix,Direction.Down,start,rows - 1,cols,rowOffset + 1,colOffset);
break;
case Direction.Up:
for (int n = rows; n > 0; )
matrix[rowOffset + --n,colOffset] = ++start;
Fill(matrix,Direction.Right,start,rows,cols - 1,rowOffset,colOffset + 1);
break;
case Direction.Down:
for (int n = 0; n < rows; ++n)
matrix[rowOffset + n,colOffset + cols - 1] = ++start;
Fill(matrix,Direction.Left,start,rows,cols - 1,rowOffset,colOffset);
break;
}
}
enum Direction { Left,Right,Up,Down };
static void Main(string[] args)
{
int n = 4;
int[,] matrix = new int[n,n];
Fill(matrix,Direction.Right,0,4,4,0,0);
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
Console.Write(matrix[i,j] + " ");
}
Console.WriteLine();
}
Console.WriteLine();
}
}