加载中...

浙江理工大学入队200题——11H

问题 H: 零基础学C/C++123——矩阵鞍点

题目描述

输入一个正整数n(1<= n <= 6)和n阶方阵a中的每一个元素,如果找到a的鞍点(鞍点的元素值在该行上最大,在该列上最小),就输出它的下标,否则输出“NO”(设a最多只有一个鞍点)。

输入

多组测试数据,每组输入一个正整数n,和n行n列的整数,每一行回车结束

输出

如果找到a的鞍点(鞍点的元素值在该行上最大,在该列上最小),就输出它的下标,否则输出“NO”(设a最多只有一个鞍点)。

样例输入 Copy

3
1 2 3
4 5 6
7 8 9
4
1 2 3 4
5 6 7 8
9 1 5 6
8 5 7 3

样例输出 Copy

0 2
NO

题解

对于每一行先查找最大值,然后在列上判断是否为最小值,比较绕的一个题目(●'◡'●)
Please calm down and u can easyeasy pass

代码(AC)

点击查看代码
#include <stdio.h>
#include <math.h>
int main (){
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		int a[n][n];
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<n;j++)
			{
				scanf("%d",&a[i][j]);
			}	
		}
		int max,xbi,xbj,s=0,flag;
		for(int i=0;i<n;i++)
		{
			max=a[i][0];
			xbi=i;
			xbj=0;
			for(int j=0;j<n;j++)
			{
				if(a[i][j]>=max) 
				{
					max=a[i][j];
					xbi=i;
					xbj=j;
				}
			}
			flag=0;
			for(int k=0;k<n;k++)
			{
				if(a[k][xbj]<a[xbi][xbj]){flag=1;}
			}
			if(flag==0)
			{
				printf("%d %d\n",xbi,xbj); 
				s=1;
			}
		}
		if(s==0){printf("NO\n");}	
	}
	return 0;
}
posted @ 2022-10-29 10:38  shany212  阅读(48)  评论(0编辑  收藏  举报