请完成函数maxMin()。 给定一个n(n>=2)行10列的整数矩阵a,函数maxMin()计算 矩阵最外围元素(指第一行、最后一行的元素,以及第一列、最后一列的元素)的最大值和最小值,并将最大值存入变量mX,最小值存入变量mN。maxMin()的第一个参数是二维整数数组a,第二个参数是a的行数n(n<=10)。 例如,main()函数中a的数据描述了一个3行10列的矩阵,该矩 阵最外围元素的最大值、最小值分别是101、2,则mX、mN的值分别为101,2。 样例输出: 101,2
时间: 2024-04-14 19:26:02 浏览: 137
```python
def maxMin(a, n):
mX = max(a[0]) # 初始化最大值为第一行的最大值
mN = min(a[0]) # 初始化最小值为第一行的最小值
for i in range(1, n-1):
mX = max(mX, a[i][0], a[i][-1]) # 更新最大值,比较当前行第一个和最后一个元素
mN = min(mN, a[i][0], a[i][-1]) # 更新最小值,比较当前行第一个和最后一个元素
mX = max(mX, max(a[-1])) # 比较最后一行的最大值
mN = min(mN, min(a[-1])) # 比较最后一行的最小值
return mX, mN
# 测试样例
a = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
[101, 22, 23, 24, 25, 26, 27, 28, 29, 30]]
n = len(a)
mX, mN = maxMin(a, n)
print(f"{mX},{mN}") # 输出:101,2
```
相关问题
题目描述 一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。 本题要求编写程序,求一个给定的n阶方阵的鞍点。 输入 输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。 输出 输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。使用C语言不用函数而是使用二维数组
好的,那么这里提供一个使用C语言实现的解决方案,不使用函数而是使用二维数组:
```c
#include <stdio.h>
int main() {
int n, i, j, k, max_index, min_index, saddle_point_exist = 0;
scanf("%d", &n);
int matrix[n][n];
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &matrix[i][j]);
}
}
for (i = 0; i < n; i++) {
max_index = 0;
for (j = 1; j < n; j++) {
if (matrix[i][j] > matrix[i][max_index]) {
max_index = j;
}
}
for (k = 0; k < n; k++) {
if (matrix[k][max_index] < matrix[i][max_index]) {
break;
}
}
if (k == n) {
printf("%d %d\n", i, max_index);
saddle_point_exist = 1;
break;
}
}
if (!saddle_point_exist) {
printf("NONE\n");
}
return 0;
}
```
该程序首先输入一个正整数n,表示矩阵的阶数。随后输入n行,每行有n个整数,表示矩阵的元素。程序会先将输入的矩阵存储在二维数组matrix中。
接着程序会在矩阵中寻找鞍点。对于矩阵中的每一行i,程序会先找到该行中最大值所在的列max_index。然后程序会在第max_index列中寻找最小值,如果该最小值等于matrix[i][max_index],则说明matrix[i][max_index]是一个鞍点,输出其位置(i, max_index),并将saddle_point_exist设置为1。最后程序会判断saddle_point_exist的值,如果为0,则输出"NONE"。
C语言代码 递归函数 【问题描述】 一个矩阵的鞍点是指矩阵的一个元素,它只是所在行的最大值,同时又是所在列的最小值。 例如下面的5*5矩阵中,第4行第1列 的8就是这个矩阵的鞍点。 11 3 5 6 9 12 4 7 8 10 10 5 6 9 11 8 6 4 7 2 15 10 11 20 25 用户给定正整数 m 和 n, 表示矩阵的行数和列数 ,然后给出 m*n 个整数,表示矩阵的具体数据。 请输出鞍点所在的行、列,以及鞍点的具体数据。 注意:如果矩阵不存在鞍点,请输出 "Not found" 【样例输入】 5 5 11 3 5 6 9 12 4 7 8 10 10 5 6 9 11 8 6 4 7 2 15 10 11 20 25 【样例输出】 4 1 8 【样例输入】 4 6 48 11 3 5 6 9 9 12 4 7 8 10 7 10 5 6 9 11 11 8 6 4 7 2 【样例输出】 Not found 【样例输入】 7 3 7 9 8 3 5 6 9 5 4 1 9 2 7 6 2 4 3 1 5 4 6 【样例输出】 Not found 【样例输入】 7 3 17 29 8 23 5 26 9 5 4 41 9 24 67 6 21 74 3 18 95 4 60 【样例输出】 3 1 9
以下是使用递归函数来解决这个问题的C语言代码:
```c
#include<stdio.h>
#define MAXN 100
int a[MAXN][MAXN];
void find_saddle(int m, int n){
int row,col;
int min,max;
int flag = 0; // 是否找到鞍点的标记
for(row=0;row<m;row++){
min = a[row][0];
col = 0;
for(int j=1;j<n;j++){ // 找到该行的最小值
if(a[row][j] < min){
min = a[row][j];
col = j;
}
}
max = a[0][col];
for(int i=1;i<m;i++){ // 判断该列是否是最大值
if(a[i][col] > max){
max = a[i][col];
}
}
if(max == min){ // 找到鞍点
printf("%d %d %d\n",row+1,col+1,max);
flag = 1;
}
}
if(!flag){ // 没有找到鞍点
printf("Not found\n");
}
}
int main(){
int m,n;
scanf("%d%d",&m,&n);
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
find_saddle(m,n);
return 0;
}
```
以上代码中,函数 `find_saddle` 用来查找矩阵的鞍点。对于矩阵中的每一行,首先找到该行的最小值以及对应的列号 col。然后在第 col 列中找到最大值 max。如果 max 等于 min,说明找到了鞍点,输出行号、列号和鞍点的值。如果找完所有行都没有找到鞍点,则输出 "Not found"。主函数中读入矩阵的行数和列数,以及具体的矩阵数据,然后调用 `find_saddle` 函数来查找鞍点。
阅读全文