用go语言写给定一个n*m矩阵A。矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第 i 行上的最大数,第 j 列上的最小数。一个矩阵A也可能没有鞍点自行输入一个二维数组,二维数组的长度才从键盘读入,第一个为列,第二个数字为行
时间: 2024-03-18 14:42:00 浏览: 62
好的,以下是实现上述功能的 Go 语言代码:
```go
package main
import "fmt"
func findSaddlePoint(matrix [][]int) (int, int, bool) {
// 获取矩阵的行数和列数
rows, cols := len(matrix), len(matrix[0])
// 遍历矩阵
for i := 0; i < rows; i++ {
for j := 0; j < cols; j++ {
// 判断该位置是否为第 i 行上的最大数,第 j 列上的最小数
isRowMax := true
isColMin := true
for k := 0; k < cols; k++ {
if matrix[i][k] > matrix[i][j] {
isRowMax = false
break
}
}
for k := 0; k < rows; k++ {
if matrix[k][j] < matrix[i][j] {
isColMin = false
break
}
}
// 如果是鞍点,则返回位置
if isRowMax && isColMin {
return i, j, true
}
}
}
// 如果没有鞍点,则返回-1
return -1, -1, false
}
func main() {
// 从键盘读取矩阵的行数和列数
var rows, cols int
fmt.Println("请输入矩阵的行数和列数:")
fmt.Scan(&cols, &rows)
// 从键盘读取矩阵的元素
matrix := make([][]int, rows)
for i := 0; i < rows; i++ {
matrix[i] = make([]int, cols)
for j := 0; j < cols; j++ {
fmt.Printf("请输入矩阵第 %d 行第 %d 列的元素:", i+1, j+1)
fmt.Scan(&matrix[i][j])
}
}
// 查找矩阵的鞍点
row, col, ok := findSaddlePoint(matrix)
if ok {
fmt.Printf("矩阵的鞍点位置为(%d, %d),值为%d\n", row+1, col+1, matrix[row][col])
} else {
fmt.Println("该矩阵没有鞍点")
}
}
```
代码中,我们定义了一个 `findSaddlePoint` 函数来寻找矩阵的鞍点,并返回鞍点的行列位置和是否存在鞍点。在 `main` 函数中,我们先从键盘读取矩阵的行数和列数,然后再从键盘读取矩阵的元素。最后,我们调用 `findSaddlePoint` 函数查找矩阵的鞍点,并输出结果。注意,在输出鞍点位置时,我们需要将行列位置加1,因为数组下标从0开始。
阅读全文