Go语言程序:旋转矩阵元素
在这篇文章中,我们将编写一个 Go 语言程序来旋转给定的矩阵元素。
使用外部函数旋转矩阵
以下代码演示了如何将矩阵逆时针旋转 90 度任意次数。
算法
步骤 1 − 导入 fmt 包。
步骤 2 − 创建一个函数来旋转数组元素。此函数将要旋转的数组作为参数。
步骤 3 − 还将数组要移动的次数作为参数。此外,初始化一个空矩阵以保存最终结果。
步骤 4 − 在函数中使用两个 for 循环来遍历矩阵,并在每次迭代时更新新矩阵中不同行的元素。返回最终获得的矩阵。
步骤 5 − 开始 main() 函数。在这里,创建一个 3 X 3 矩阵并在屏幕上打印它。
步骤 6 − 通过传递相应的参数调用 rotateMatrix() 函数,并将获得的结果存储在一个单独的变量中。
步骤 7 − 使用 for 循环和 fmt.Println() 函数在屏幕上打印最终结果。
示例
package main import "fmt" // function to rotate matrix func rotateMatrix(X [][]int, n int) [3][3]int { var temp [3][3]int for i := 0; i < n; i++ { for j := 0; j < n; j++ { temp[n-j-1][i] = X[i][j] } } return temp } func main() { mat := [][]int{ {10, 1, 2}, {4, 5, 6}, {8, 9, 10}, } fmt.Println("The given matrix is: \n") for i := 0; i < 3; i++ { for j := 0; j < 3; j++ { fmt.Print(mat[i][j], "\t") } fmt.Println() } fmt.Println() var n int = 3 result := rotateMatrix(mat, n) fmt.Println("The matrix obtained after rotating the above matrix to", n, "Positions is:") fmt.Println() for i := 0; i < 3; i++ { for j := 0; j < 3; j++ { fmt.Print(result[i][j], "\t") } fmt.Println() } }
输出
The given matrix is: 10 1 2 4 5 6 8 9 10 The matrix obtained after rotating the above matrix to 3 Positions is: 2 6 10 1 5 9 10 4 8
将数组元素顺时针旋转 N 次
在这个例子中,我们将编写一个 Go 语言程序,将数组元素顺时针移动任意次数。
算法
步骤 1 − 导入 fmt 包。
步骤 2 − 开始 main() 函数。在这里,创建一个 3 X 3 矩阵并在屏幕上打印它。
步骤 3 − 使用 for 循环和 fmt.Println() 函数在屏幕上打印最终结果。
步骤 4 − 使用 for 循环遍历数组,并分别将数组的位置顺时针移动。
步骤 5 − 现在,使用 fmt.Println() 函数在屏幕上打印数组。
示例
package main import "fmt" // calling main() func main() { // initializing a 3 X 3 matrix mat := [3][3]int{ {1, 3, 2}, {4, 5, 6}, {8, 9, 10}, } fmt.Println("The given matrix is: \n") for i := 0; i < 3; i++ { for j := 0; j < 3; j++ { fmt.Print(mat[i][j], "\t") } fmt.Println() } var N int = 3 fmt.Println() fmt.Println("The matrix obtained after rotating the above matrix to", N, "Positions clock wise is:") fmt.Println() for i := N - 1; i >= 0; i-- { for j := N - 1; j >= 0; j-- { fmt.Print(mat[i][j], "\t") } fmt.Println() } }
输出
The given matrix is: 1 3 2 4 5 6 8 9 10 The matrix obtained after rotating the above matrix to 3 Positions clock wise is: 10 9 8 6 5 4 2 3 1
将数组元素旋转 180 度
在这个例子中,我们将编写一个 Go 程序,将矩阵元素旋转 180 度。
算法
步骤 1 − 导入 fmt 包。
步骤 2 − 创建名为 reverseColumns()、transpose() 和 printMatrix() 的函数,分别用于反转矩阵的列、查找其转置和打印元素。
步骤 3 − 还将矩阵作为参数传递给函数。
步骤 4 − 在这些函数中,我们使用 for 循环来执行相应的操作。
步骤 5 − 开始 main() 函数。在这里,创建一个 3 X 3 矩阵并在屏幕上打印它。
步骤 6 − 通过将数组作为参数调用 rotate180() 和 printMatrix() 函数。
示例
package main import "fmt" func reverseColumns(arr [][]int) { var c int = 3 for i := 0; i < 3; i++ { for j, k := 0, c-1; j < k; j, k = j+1, k-1 { t := arr[j][i] arr[j][i] = arr[k][i] arr[k][i] = t } } } func transpose(arr [][]int) { for i := 0; i < 3; i++ { for j := i; j < 3; j++ { t := arr[i][j] arr[i][j] = arr[j][i] arr[j][i] = t } } } func printMatrix(arr [][]int) { for i := 0; i < 3; i++ { for j := 0; j < 3; j++ { fmt.Print(arr[i][j], "\t") } fmt.Println() } } func rotate180(arr [][]int) { transpose(arr) reverseColumns(arr) transpose(arr) reverseColumns(arr) } // calling main() func main() { // initializing a 3 X 3 matrix mat := [][]int{ {1, 3, 2}, {4, 5, 6}, {8, 9, 10}, } // printing matrix fmt.Println("The given matrix is: \n") for i := 0; i < 3; i++ { for j := 0; j < 3; j++ { fmt.Print(mat[i][j], "\t") } fmt.Println() } fmt.Println() fmt.Println("The matrix obtained after rotating the above matrix to", 3, "Positions clock wise is:") fmt.Println() rotate180(mat) printMatrix(mat) }
输出
The given matrix is: 1 3 2 4 5 6 8 9 10 The matrix obtained after rotating the above matrix to 3 Positions clock wise is: 10 9 8 6 5 4 2 3 1
结论
在这篇文章中,我们成功地执行了一个 Go 语言代码来旋转数组元素以及示例。我们在这里看到了三个不同的例子,在第一个例子中;我们将矩阵顺时针旋转了 90 度。在第二个例子中,我们将矩阵旋转了 N 次,在第三个例子中,我们将矩阵旋转了 180 度。