寻找二维数组中的鞍点(C++习题)

what’s 鞍点?

二维数组中的鞍点,即该位置上的元素值是所在行上的最大值,是所在列上的最小值。也可能没有鞍点。

上代码

#include<iostream>
#include <stdlib.h> 
#include <time.h>
#include<iomanip>
using namespace std;
#define N 4 //行 
#define M 5 //列 

bool judge(int arr[N][M],int value,int row_set,int col_set) {
    
    

	//求每行最大 0行 5列 s<5  e是传进来的每个数组值 
    for(int s=0;s<M;s++){
    
    
        if (value < arr[row_set][s])
            return false;
    }
    
	//求每列最大 0列 4行 k<4   e是传进来的每个数组值 
    for(int k=0;k<N;k++){
    
    
        if (value > arr[k][col_set])
            return false;
    }
    return true;
}

//找鞍点函数  
void find(int arr[N][M], int* row, int* col){
    
    
	
	for(int i=0;i<N;i++){
    
    
        for(int j=0;j<M;j++){
    
    
            int value = arr[i][j];
            bool result = judge(arr,value,i,j);
           
            row =&i;
            col =&j;
            
            if(result){
    
    
            	cout << value <<" :yes saddle point"<<endl;
                cout<<"鞍点位于第"<<*row<<"行"<<*col<<"列"<<endl; 
			}
        }
    }
	
}



int main(){
    
    
	int arr[N][M]={
    
    
	1,2,3,4,5,
	2,4,6,8,10,
	3,6,9,12,15,
	4,8,12,16,20
	};
	cout<<"二维数组为:"<<endl; 
	for(int i=0;i<N;i++){
    
    
        for(int j=0;j<M;j++){
    
    
			cout<<setw(4)<<arr[i][j];
		}
		cout<<endl;
	}
	cout<<endl;
	int row=0,col=0;
	find(arr,&row,&col);
    return 0;
} 

测试效果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45833112/article/details/127322027