[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 找鞍点的主要内容,如果未能解决你的问题,请参考以下文章