解题思路:

(1)题目对于输入的二维矩阵只是要求找最大值,而找最大值的方法只是在每次输入值时进行比较和更新,故本题有个偷懒的写法:不建立二维数组,只需要用 for() 或者 while() 连续输入 n * n 个数据,在循环中更新最大值就行了。

(2)本人为了严谨,建了一个 vector<vector<int>> 变量来模拟矩阵,定义了一个结构体保存下标。


注意事项:

本人填充 vector<vector<int>> 的方法是把每行的数据 push 进一个临时的 vector<int>,再把这个临时数组 push 进二维数组,但是这样感觉很繁琐,应该有更高效的做法。


参考代码:

// 题目 1069: 二级C语言-寻找矩阵最值
#include <iostream>
#include <vector>

using namespace std;

// 用于保存最大值的行和列
struct Pos {
	int x;
	int y;
};

int main() {
	vector<vector<int>> arr; // 建立二维数组
	int maxAbs = 0;          // 最大值
	Pos max;                 // 最大值的坐标
	int val = 0;             // 每次输入的矩阵元素
	int n = 0;               // 矩阵阶数
	cin >> n;
	for (int i = 0; i < n; ++i) {
		vector<int> temp; // 一维矩阵,临时保存数据
		for (int j = 0; j < n; ++j) {
			cin >> val;
			temp.push_back(val);
			// 更新最大值及其下标
			if (abs(val) > abs(maxAbs)) {
				maxAbs = val;
				max.x = i + 1;
				max.y = j + 1;
			}
		}
		arr.push_back(temp); // 把一维矩阵放进二维矩阵
	}
	cout << maxAbs << " " << max.x << " " << max.y << endl;
	return 0;
}


点赞(0)
 

0.0分

4 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 2 条评论

向志权 10月前 回复TA
#include<stdio.h>
int main()
{
	int i,j;
	int x[100][100];
	int max=0;
	int line,column;
	int n;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
		{
			scanf("%d",&x[i][j]);
		}
	}
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
		{
			if(x[i][j]>max)
			{
				max=x[i][j];
				line=i;
				column=j;
			}
		}
	}
	printf("%d %d %d\n",max,line,column);
	return 0;
}
uq_40583165701 2年前 回复TA
这不是繁琐的问题,
本来初学者就不容易,
你还来个维度空间的知识,
无疑是增添负担,
让人觉得你有显摆的成分!!!