分别找到矩阵中每一行最大值和每一列最小值

//给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。
//鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。
//例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。
//11 3 5 6 9
//12 4 7 8 10
//10 5 6 9 11
//8 6 4 7 2
//15 10 11 20 25
//
//输入
//输入包含一个5行5列的矩阵
//输出
//如果存在鞍点,输出鞍点所在的行、列及其值,如果不存在,输出"not found"
//样例输入
//11 3 5 6 9
//12 4 7 8 10
//10 5 6 9 11
//8  6 4 7 2
//15 10 11 20 25
//样例输出
//4 1 8


#include<iostream>
#include<cmath>
#include<cstdio>
#include<iomanip>
#include<bitset>

using namespace std;

int a[5][5];
int mx[5]={0, 0, 0, 0, 0},mn[5];

int main()
{
    int i,j,m=0;
    for(i=0;i<5;i++)           //这里输入5*5矩阵 
    {
        for(j=0;j<5;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }                       
    
    for(i=0;i<5;i++)           //找到5*5矩阵最大值,mx[5]数组存储每行的最大值,mn[5]用来存储每行的最小值。 
    {
        for(j=0;j<5;j++)
        {
            if(m<a[i][j])
                m=a[i][j]; 
        }
    }
    for(i=0;i<5;i++)            //这一步是为了给mn找到一个最大的初值,方便后面比较 
    {
        mn[i]=m+1;
    }
    
    
    for(i=0;i<5;i++)          //找到每行的最大值 
    {
        for(j=0;j<5;j++)
        {
            if(a[i][j]>mx[i])   //重点在于这里的i,j赋值方法,下面找到每列的最小值方法同理 
            {
                mx[i]=a[i][j];
            }
        }
        
        for(j=0;j<5;j++)
        {
            if(a[i][j]<mn[j])
            {
                mn[j]=a[i][j];
            }
        }
    }
    
    
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            if(mx[i]==mn[j])
            printf("%d %d %d",i+1,j+1,mx[i]);      
        }
    }
    
    
    
//        for(int k=0;k<5;k++)
//        {
//            printf("%d ",mn[k]);
//        }
         
    return 0;
    
    
}

 

其他参考代码:

 

#include <iostream> 
#include <cstring>
#include<math.h>
#include<iomanip>
int main() 
{
int a[5][5],hmax=-1,lmin=-1,l=-1,h=-1,h0=-1;
for(int i=0;i<5;i++)
 for(int j=0;j<5;j++)
scanf("%d",&a[i][j]);

for(int i=0;i<5;i++)
{	
hmax=-1,lmin=-1,l=-1,h=i;
	for(int j=0;j<5;j++)
	  {
	  	if(hmax<a[i][j])
	  	{hmax=a[i][j];
	  	 l=j;
		  }
	  }
	  
	  for(int i2=0;i2<5;i2++)
	  {
	  	if(hmax>a[i2][l])
	  	h=i2;
	  }
	  
	  if(h==i)
	  {
	  	h0=i+1;
	  	printf("%d %d %d",h+1,l+1,hmax);
	    break;
	  }
	  
}


if(h0<0)
printf("not found");

}
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值