用go语言实现:螺旋矩阵 所谓“螺旋矩阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。 输入格式: 输入在一行中给出一个正整数N(<10)。 输出格式: 输出N×N的螺旋方阵。每行N个数字,每个数字占4位。 输入样例: 5 输出样例: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9
时间: 2024-03-19 16:46:01 浏览: 77
以下是用 Go 语言实现螺旋矩阵的代码:
```
package main
import "fmt"
func generateMatrix(n int) [][]int {
matrix := make([][]int, n)
for i := 0; i < n; i++ {
matrix[i] = make([]int, n)
}
i, j, num := 0, 0, 1
for k := 0; k < n/2; k++ {
for j = k; j < n-k-1; j++ {
matrix[i][j] = num
num++
}
for i = k; i < n-k-1; i++ {
matrix[i][j] = num
num++
}
for j = n-k-1; j > k; j-- {
matrix[i][j] = num
num++
}
for i = n-k-1; i > k; i-- {
matrix[i][j] = num
num++
}
}
if n%2 == 1 {
matrix[n/2][n/2] = num
}
return matrix
}
func main() {
var n int
fmt.Scan(&n)
matrix := generateMatrix(n)
for i := 0; i < n; i++ {
for j := 0; j < n; j++ {
fmt.Printf("%4d", matrix[i][j])
}
fmt.Println()
}
}
```
其中,`generateMatrix` 函数接受一个整数参数 `n`,返回一个包含螺旋矩阵的二维切片。我们首先创建一个 `n` × `n` 的二维切片 `matrix`,并初始化所有元素为 0。然后,我们使用循环生成螺旋矩阵。具体地,我们使用 `k` 表示当前正在生成第 `k` 圈,从外层到内层,每一圈都包含四个边界,分别是:
- 上边界:从左到右,第 `k` 行的第 `k` 列到第 `k` 行的第 `n-k-1` 列;
- 右边界:从上到下,第 `k` 行的最后一列到第 `n-k-1` 行的最后一列;
- 下边界:从右到左,第 `n-k-1` 行的最后一列到第 `n-k-1` 行的第 `k` 列;
- 左边界:从下到上,第 `n-k-1` 行的第 `k` 列到第 `k` 行的第 `k` 列。
我们使用 `i` 和 `j` 分别表示当前正在处理的元素所在的行和列,使用 `num` 表示当前正在填充的数字。对于每一圈,我们依次按照上、右、下、左的顺序填充元素,并将 `num` 加 1。最后,我们需要特别处理 `n` 为奇数的情况,将中心位置的元素赋值为 `num`。
在 `main` 函数中,我们首先读取输入的整数 `n`,然后调用 `generateMatrix` 函数生成螺旋矩阵,并循环输出它们。由于每个数字占 4 位,我们使用 `Printf` 函数并指定宽度为 4 来输出它们。
输入样例:
```
5
```
输出样例:
```
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
```
阅读全文