|
|
发表于 2023-11-14 13:15:46
|
显示全部楼层
本楼为最佳答案
 你的代码有几个问题。首先,你在第二个for循环中使用了变量i而不是j,这会导致程序出错。其次,在内层循环中,你的条件判断有误。正确的条件应该是该位置上的元素在该行上最大,在该列上最小,而不是同时判断是否大于等于该列的最大值和小于等于该行的最小值。最后,你的输出位置也有问题,应该在找到鞍点后立刻输出并退出循环,而不是等到循环结束后再判断。
以下是修改后的代码:
- #include <iostream>
- using namespace std;
- int main() {
- int arr[3][3];
- for (int i = 0; i < 3; i++) {
- for (int j = 0; j < 3; j++) {
- cin >> arr[ i][j];
- }
- }
- int saddlePointRow = -1;
- int saddlePointCol = -1;
- for (int i = 0; i < 3; i++) {
- int maxInRow = arr[ i][0];
- int colIndexOfMaxInRow = 0;
- for (int j = 1; j < 3; j++) {
- if (arr[ i][j] > maxInRow) {
- maxInRow = arr[ i][j];
- colIndexOfMaxInRow = j;
- }
- }
- bool isSaddlePoint = true;
- for (int k = 0; k < 3; k++) {
- if (arr[k][colIndexOfMaxInRow] < maxInRow) {
- isSaddlePoint = false;
- break;
- }
- }
- if (isSaddlePoint) {
- saddlePointRow = i;
- saddlePointCol = colIndexOfMaxInRow;
- break;
- }
- }
- if (saddlePointRow != -1 && saddlePointCol != -1) {
- cout << "Saddle point:a[" << saddlePointRow << "][" << saddlePointCol << "]=" << arr[saddlePointRow][saddlePointCol] << endl;
- } else {
- cout << "There is no saddle point" << endl;
- }
- return 0;
- }
复制代码
这个修正后的代码会正确找出二维数组中的鞍点,并输出鞍点坐标及数值,或者输出无鞍点。 |
|