1.一个二维数组中,规定第i行中最小值且是第j列中的最大值,则称该元素为二维数组(二维矩阵)的一个鞍点,编写一个算法,找出这个二维数组中所有的鞍点
解题思路:
1.找出每一行中最小的数字
2.该行最小的数字,所在的列的最大数字
3.判断两个数字 是否相等 && 两个数字 的 i,j 是否相等,如果相等,这个就是鞍点,如果不相等,就不是鞍点
示例函数代码
void saddle (int a[][4],int n,int m){
int w_i = 0, w_j = 0, min,max;
for (int i = 0; i < n; i++) {
min = a[i][0];
w_i = i;
w_j = 0;
for (int j = 1; j < m; j++) {
if (a[i][j] < min) {
min = a[i][j]; // 这里是找出每一行最小的 数字
w_i = i;
w_j = j;
}
}
printf("第 %d 行 最小的值为 %d \n",w_i,min);
// 判断每一行最小的那个数字,是不是该列的最大的值
max = a[0][w_j];
int l_x = 0;
for (int i = 0; i < n; i++) {
if (a[i][w_j] > max) {
max = a[i][w_j];
l_x = i;
}
}
if (max == min && l_x == w_i) {
printf("第 %d行 第 %d列 %d 是一个鞍点 \n",l_x,w_j,max);
}
}
}
运行结果
鞍点运行结果.png
网友评论