一本通网站1122题:计算鞍点

【题目描述】

给定一个5×5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。

例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。

c 复制代码
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"。

【输入样例】

bash 复制代码
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

cpp 复制代码
#include<iostream>
using namespace std;
#include<string>
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr); cout.tie(nullptr);
	//创建二维数组并输入数据
	int** arr = new int* [5];
	bool flag;
	for (int i = 0; i < 5; i++)
	{
		arr[i] = new int[5];
	}
	for (int i = 0; i < 5; i++)
	{
		for (int j = 0; j < 5; j++)
		{
			cin >> arr[i][j];
		}
	}
	for (int i = 0; i < 5; i++)
	{
		int max_num = arr[i][0];
		int k = 0;
		//遍历行,找出最大值及其列号
		for (int j = 0; j < 5; j++)
		{
			if (arr[i][j] > max_num) {
				max_num = arr[i][j];
				k = j;
			}
		}
		flag = true;
		//遍历列,判断该最大值是否为该列最小值
		for (int j = 0; j < 5; j++)
		{
			if (j == i) {
				continue;
			}
			if (arr[j][k] < arr[i][k]) {
				flag = false;
			}
		}
		//如果是则输出该鞍点的位置及值并结束程序
		if (flag)
		{
			cout << i + 1 << " " << k + 1 << " " << arr[i][k];
			break;
		}
	}
	//如果没有鞍点则输出"not found"
	if (!flag) {
		cout << "not found" << endl;
	}
}

题目大概的思路就是遍历每一行,找到这一行的最大值,然后记录所在的列,然后固定列,再去判断是不是这一列的最小值,然后用一个flag进行标记,最后也可以通过flag判断是否找到,如果没找到就输出not found。

我犯了两个错误:

  1. 在找最大值的时候,只顾着更新k,没有更新max_num,那么这个值就不一定是这一行的最大值
  2. 忘了判断在没有找到的时候打印not found。有时候还是需要多读几遍题目。不要漏掉了条件。
相关推荐
David猪大卫14 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger14 小时前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
星恒随风14 小时前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql
努力努力再努力wz17 小时前
【Lua 进阶系列】从 C++ 对象到 Lua 变量:一文理解 userdata、Lua 栈与元表绑定机制
c++·junit·lua
慧都产品智能化17 小时前
Qt 表格升级攻略:复用已有编辑器,减少重复开发
c++·qt·编辑器·qt6.3
ShineWinsu18 小时前
对于Qt:QTableWidget常见属性以及QTableWidgetItem类的解析
开发语言·c++·qt·gui·客户端·表格·qtablewidget
蒸蒸yyyyzwd18 小时前
从后端面经学到的 3 个知识
笔记·学习
17岁的勇气18 小时前
Unity Shader unity文档学习笔记(二十二):shader变体
笔记·学习·unity
ShineWinsu19 小时前
对于Qt:QListWidget常见属性以及QListWidgetItem类的解析
开发语言·c++·qt·客户端·列表·qlistwidget·qlistwidgetitem
坤坤子吖19 小时前
Linux网络编程:自定义应用层协议与 JSON 序列化
linux·服务器·网络·c++·笔记·json