编写一个函数void ad(int a[M][N])找出一个M行N列(M、N为符号常量)的二维数组a中的“鞍点”。在主函数中输入二维数组a的值,并将它作为实参调用ad函数。所谓“鞍点”是指该位置上的元
时间: 2024-02-13 11:06:16 浏览: 56
素在该行上最大,在该列上最小。如果不存在“鞍点”,输出“NO”。
下面是函数void ad(int a[M][N])的实现:
```c++
#include <iostream>
using namespace std;
const int M = 3; // 行数
const int N = 4; // 列数
void ad(int a[M][N]) {
for (int i = 0; i < M; i++) {
int min_val = a[i][0]; // 找出第i行的最小值
int min_j = 0; // 最小值的列号
for (int j = 1; j < N; j++) {
if (a[i][j] < min_val) {
min_val = a[i][j];
min_j = j;
}
}
bool is_saddle = true; // 是否为鞍点
for (int k = 0; k < M; k++) {
if (a[k][min_j] > a[i][min_j]) { // 判断是否为鞍点
is_saddle = false;
break;
}
}
if (is_saddle) { // 输出鞍点
cout << "鞍点为:" << a[i][min_j] << endl;
return;
}
}
cout << "NO" << endl;
}
int main() {
int a[M][N];
cout << "请输入" << M << "行" << N << "列的二维数组:" << endl;
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
cin >> a[i][j];
}
}
ad(a);
return 0;
}
```
在主函数中,我们首先输入了一个M行N列的二维数组a,然后将其作为实参调用了ad函数。
ad函数首先遍历每一行,找出每一行的最小值以及最小值所在的列号。接着对于每个最小值所在的列号,遍历每一行,判断该位置是否为鞍点。如果是,则输出鞍点,并返回;否则继续遍历下一行。如果所有行都遍历完成,仍然没有找到鞍点,则输出“NO”。
阅读全文