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
时间: 2024-01-01 16:04:45 浏览: 53
C语言中递归函数的设计完整版资料.ppt
以下是使用递归函数来解决这个问题的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` 函数来查找鞍点。
阅读全文