很早之前报名的一个课程 但一直没时间(其实是忘了)去完成
现在刚好又开始学了go 也差不多又要到这个阶段 就算是一个flag 这次要把所有题都完成

1 蛇形矩阵

原题链接:
https://www.acwing.com/problem/content/758/
模拟 但却是有技巧的模拟
主要就是转向条件那里 如果没有做过一次真的在现场很容易被绕进去

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package main

import (
"fmt"
)

const N, M int = 110, 110

func main() {
n, m := 0, 0
fmt.Scanf("%d %d", &n, &m)
var g [N][M]int
// 右 下 左 上
dx := [...]int{0, 1, 0, -1}
dy := [...]int{1, 0, -1, 0}
d := 0
row, col := 0, 0
for idx := 1; idx <= n*m; idx++ {
g[row][col] = idx
x := row + dx[d]
y := col + dy[d]
if x >= 0 && x < n && y >= 0 && y < m && g[x][y] == 0{
row = x
col = y
}else{
d = (d + 1) % 4
row = row + dx[d]
col = col + dy[d]
}
}

for i :=0 ; i < n ; i++{
for j := 0 ; j < m ; j++{
fmt.Printf("%d ",g[i][j])
}
fmt.Println()
}
}