当前位置:首页 » 《随便一记》 » 正文

方阵中的鞍点判断(数组) C语言_Naion的博客

22 人参与  2022年05月07日 13:08  分类 : 《随便一记》  评论

点击全文阅读


描述:

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

输入

3

1 2 3

0 1 2

0 0 1

输出

2 2

样例输入

4

1 2 3 4

0 1 1 3

0 0 1 2

1 0 0 1

样例输出

NO

思路及分析:

        用二维数组来做这道题会减小我们的难度。同时,先求出每一行的最大值,再在这一个元素的这一列来判断它是不是最小的,对它们进行判断。最后打印出这个元素的下标就可以了。同时还要注意,在样例中输入4和矩阵里的元素时发现,有重复的值(1)的时候,就算他是最小的,但因为重复,不符合鞍点的定义,所以,还需要判断是否有重复的值。另外,题目说明,鞍点最多只有一个。

#include<stdio.h>

int main(void)
{
	int i = 0,  j = 0;
	int arr[6][6] = { 0 };
	int max = 0;//定义最大值 
	int _bool = 0;//标签作用,用来判断是否有重复值
	//最后当_bool=0,说明没有,_bool=1,说明有 
	int row = 0, col = 0;//行,列 
	int m = 0; 
	scanf("%d", &m);
	
	for(i = 0; i < m; i++)
	{
		for(j = 0; j < m; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}
	
	//由于不知道最大值,开始假设第一行第一列元素是最大的 
	max = arr[0][0];
		 
	for(i = 0; i < m; i++)//一行 
	{
		//假设每一行的第一个元素为最大值 
		max = arr[i][j];
		//寻找每一行的最大值 
		for(j = 0; j < m; j++)
		{
			
			if(arr[i][j] > max)
			{
				//如果是MAX,就记录它的下标
				//不可以直接用i或j,它们是随条件在变
				//用另一个量来记录下标 
				row = j;
				_bool = 1; 
				//记录最大值,在后面的判断用 
				max = arr[i][j];
			}
		}
		
		//用来判断这一行的最大值是否有重复的
		//如果有,_bool=0,不存在鞍点 
		for(j = 0; j < m; j++)
		{
			//循环时不需要判断它本身 
			if(arr[i][j] == max && j != row)
			{
				_bool = 0;
			}
		}
		
		//列的判断,行满足后,找列的最小值。 
		for(j = 0; j < m; j++)
		{	
			if(arr[i][row] < arr[j][row])
			{
				col = i;
			}
		}		
	}
	
	if(_bool == 0)
	{
		printf("NO\n");
	}
	else
	{
		printf("%d %d", row, col);
	}
	
	return 0;
}

        


点击全文阅读


本文链接:http://zhangshiyu.com/post/39660.html

最大值  下标  元素  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1