C++求鞍点

题目描述        

        鞍点,就是指在一个矩阵元素的值在其所在行中最大,在其所在列中最小。要求编写程序求出二维数组中的鞍点。要求输入一个N*N型的二维数组,输出该矩阵数组的鞍点所在的行、列以及元素值。

输入用例

3

1        3        2

4        5        6

7        8        9

输出结果

3

解题思路

        对于求解鞍点,设数组是A[N][N],思路是先求每一行的最大值:定义一个元素max1,来存取每一行元素中最大的那个,同时定义一个元素m,来存取max1对应的列下标。

        然后再判断最大值是不是所在的列的最小值:对第m列的元素从0到N开始行遍历,如果有比max1还小的元素(说明max1不是这一列的最小值,并不是鞍点),就判断为false,直接跳出这层循环。如果遍历结果没有比max1还小的元素就输出它。

代码实现
#include <iostream>
using namespace std;
int main()
{

    int N;
    cout<<"输入N*N型矩阵的N值:";
    cin>>N;
    int a[N][N];
    cout<<"输入矩阵元素:"<<endl;
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
            cin>>a[i][j];
    }
    int max1=0;                     //定义行最大
    int p=0;                        //定义行最大时的列下标,便于对该列进行——行遍历
    bool test;
    for(int i=0;i<N;i++)
    {
        test=true;                  //每次外部遍历设置初始值设为true
        for(int j=0;j<N;j++)
        {
            if(a[i][j]>max1)
            {
                max1=a[i][j];       //找出每行最大的数
                p=j;                //存取每行最大的数所在的列
            }
        }
        for(int k=0;k<N;k++)       //对每一行最大值所在的列进行遍历
        {
            if(a[k][p]<max1)        //一旦有比max1还要小的便判断为false,并跳出
            {
                test=false;
                break;
            }
        }
        if(test)                    //判断为true即是鞍点,由于一个矩阵一般只有一个鞍点,便直接跳出外循环
            {cout<<"该矩阵的鞍点在第"<<i+1<<"行,第"<<p+1<<"列,鞍点的值为"<<max1<<endl;
            break;}

    }
    if(!test)cout<<"无鞍点!";
}
测试

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值