[PTA]习题7-5 找鞍点

Posted Spring-_-Bear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PTA]习题7-5 找鞍点相关的知识,希望对你有一定的参考价值。

[PTA]习题7-5 找鞍点

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入格式:
输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:
输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

输入样例1:
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
输出样例1:
2 1
输入样例2:
2
1 7
4 1
输出样例2:
NONE

  • 提交结果:

在这里插入图片描述

  • 源码:
#include<stdio.h>
int main(void)
{
	int matrix[6][6];
	int n;   // n阶方阵
	int existSaddlePoint = 0;   // 该方阵中是否存在鞍点:0:不存在;   1:存在

	scanf("%d", &n);
	 
	for (int i = 0; i < n; i++)   // 输入方阵数据
	{
		for (int j = 0; j < n; j++)
		{
			scanf("%d", &matrix[i][j]);
		}
	}

	for (int i = 0; i < n; i++)   
	{		
		int maxRow = matrix[i][0];   // 假设每一行的第一个元素最大,后续比较过程,若该行中存在比其大的值,则更新其值
		int index = 0;   // 每行最大元素的列下标
		int flag = 1;   // 每行最大元素是否是鞍点,0:不是;   1:是

		for (int j = 1; j < n; j++)   // 遍历该行余下元素,寻找到该行最大的元素,其行标为:i,列标为:j
		{
			if (matrix[i][j] >= maxRow)
			{
				maxRow = matrix[i][j];
				index = j;
			}
		}

		// 找到每行最大值后,判断其是否是该列最小元素,若是,则找到鞍点,否则该行不存在鞍点
		for (int k = 0; k < n; k++)
		{
			if (matrix[k][index] < maxRow)   // 最大值所在列存在比其小的元素,该最大值不是鞍点
			{
				flag = 0;
				break;
			}
		}

		if (flag == 1)   // 找到鞍点
		{
			existSaddlePoint = 1;   // 找到鞍点,存在鞍点
			printf("%d %d", i, index);
			break;
		}
	}

	// 遍历完所有行,不存在鞍点
	if (existSaddlePoint == 0)
	{
		printf("NONE");
	}

	return 0;
}
  • 注:个人觉得此题PTA的评判存在bug,未考虑同一行中存在多个相同最大值情况,奈何反馈渠道已被关闭,只好写于此,望与有缘之君讨论学习。

以上是关于[PTA]习题7-5 找鞍点的主要内容,如果未能解决你的问题,请参考以下文章

[PTA]实验7-2-8 找鞍点

python练习题4.22找鞍点

C语言编程题,找鞍点

C语言 找鞍点

二维数组找鞍点

java实验四——找鞍点