鱼C论坛

 找回密码
 立即注册
查看: 1357|回复: 1

[已解决]求助一下

[复制链接]
发表于 2023-11-14 13:15:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小(也可能没有鞍点)


【输入形式】

数组


【输出形式】

输出鞍点坐标及数值,或者输出无鞍点


【样例输入】

1 2 4

2 4 8

3 6 12


【样例输出】

Saddle point:a[0][2]=4



【样例输入】

1 2 4

2 9 3

3 6 12


【样例输出】

There is no saddle point


这题用C++怎么做
#include <iostream>
#include <unordered_map>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{

    int arr[3][3];int i,j;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            cin>>arr[i][j];
        }
    }
int m=0;
for(i=0;i<3;i++)
{
        for(j=0;i<3;j++)
        {
                if(arr[i][j]>=arr[0][j]&&arr[i][j]>=arr[1][j]&&arr[i][j]>=arr[2][j]&&arr[i][j]<=arr[i][0]&&arr[i][j]<=arr[i][1]&&arr[i][j]<=arr[i][2])
                {
                m=1;
                break;
                }
                else
                {
                        m=0;
                }
        }
}
if(m==1)
{
                cout<<"Saddle point:a["<<i<<"]["<<j<<"]="<<arr[i][j];
}
else
{
        cout<<"There is no saddle point"<<endl;
}
    return 0;
}


我这样写哪里错了,要怎么改
最佳答案
2023-11-14 13:15:46
你的代码有几个问题。首先,你在第二个for循环中使用了变量i而不是j,这会导致程序出错。其次,在内层循环中,你的条件判断有误。正确的条件应该是该位置上的元素在该行上最大,在该列上最小,而不是同时判断是否大于等于该列的最大值和小于等于该行的最小值。最后,你的输出位置也有问题,应该在找到鞍点后立刻输出并退出循环,而不是等到循环结束后再判断。

以下是修改后的代码:

  1. #include <iostream>
  2. using namespace std;

  3. int main() {
  4.     int arr[3][3];
  5.     for (int i = 0; i < 3; i++) {
  6.         for (int j = 0; j < 3; j++) {
  7.             cin >> arr[ i][j];
  8.         }
  9.     }

  10.     int saddlePointRow = -1;
  11.     int saddlePointCol = -1;

  12.     for (int i = 0; i < 3; i++) {
  13.         int maxInRow = arr[ i][0];
  14.         int colIndexOfMaxInRow = 0;
  15.         for (int j = 1; j < 3; j++) {
  16.             if (arr[ i][j] > maxInRow) {
  17.                 maxInRow = arr[ i][j];
  18.                 colIndexOfMaxInRow = j;
  19.             }
  20.         }

  21.         bool isSaddlePoint = true;
  22.         for (int k = 0; k < 3; k++) {
  23.             if (arr[k][colIndexOfMaxInRow] < maxInRow) {
  24.                 isSaddlePoint = false;
  25.                 break;
  26.             }
  27.         }

  28.         if (isSaddlePoint) {
  29.             saddlePointRow = i;
  30.             saddlePointCol = colIndexOfMaxInRow;
  31.             break;
  32.         }
  33.     }

  34.     if (saddlePointRow != -1 && saddlePointCol != -1) {
  35.         cout << "Saddle point:a[" << saddlePointRow << "][" << saddlePointCol << "]=" << arr[saddlePointRow][saddlePointCol] << endl;
  36.     } else {
  37.         cout << "There is no saddle point" << endl;
  38.     }

  39.     return 0;
  40. }
复制代码


这个修正后的代码会正确找出二维数组中的鞍点,并输出鞍点坐标及数值,或者输出无鞍点。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-14 13:15:46 | 显示全部楼层    本楼为最佳答案   
你的代码有几个问题。首先,你在第二个for循环中使用了变量i而不是j,这会导致程序出错。其次,在内层循环中,你的条件判断有误。正确的条件应该是该位置上的元素在该行上最大,在该列上最小,而不是同时判断是否大于等于该列的最大值和小于等于该行的最小值。最后,你的输出位置也有问题,应该在找到鞍点后立刻输出并退出循环,而不是等到循环结束后再判断。

以下是修改后的代码:

  1. #include <iostream>
  2. using namespace std;

  3. int main() {
  4.     int arr[3][3];
  5.     for (int i = 0; i < 3; i++) {
  6.         for (int j = 0; j < 3; j++) {
  7.             cin >> arr[ i][j];
  8.         }
  9.     }

  10.     int saddlePointRow = -1;
  11.     int saddlePointCol = -1;

  12.     for (int i = 0; i < 3; i++) {
  13.         int maxInRow = arr[ i][0];
  14.         int colIndexOfMaxInRow = 0;
  15.         for (int j = 1; j < 3; j++) {
  16.             if (arr[ i][j] > maxInRow) {
  17.                 maxInRow = arr[ i][j];
  18.                 colIndexOfMaxInRow = j;
  19.             }
  20.         }

  21.         bool isSaddlePoint = true;
  22.         for (int k = 0; k < 3; k++) {
  23.             if (arr[k][colIndexOfMaxInRow] < maxInRow) {
  24.                 isSaddlePoint = false;
  25.                 break;
  26.             }
  27.         }

  28.         if (isSaddlePoint) {
  29.             saddlePointRow = i;
  30.             saddlePointCol = colIndexOfMaxInRow;
  31.             break;
  32.         }
  33.     }

  34.     if (saddlePointRow != -1 && saddlePointCol != -1) {
  35.         cout << "Saddle point:a[" << saddlePointRow << "][" << saddlePointCol << "]=" << arr[saddlePointRow][saddlePointCol] << endl;
  36.     } else {
  37.         cout << "There is no saddle point" << endl;
  38.     }

  39.     return 0;
  40. }
复制代码


这个修正后的代码会正确找出二维数组中的鞍点,并输出鞍点坐标及数值,或者输出无鞍点。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-21 05:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表