解题思路:
(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分
4 人评分
#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; }
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:639 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:635 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:616 |
矩阵乘法 (C++代码)浏览:1460 |
不会做的浏览:873 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:482 |
WU-蓝桥杯算法提高VIP-交换Easy (C++代码)浏览:1111 |
C语言程序设计教程(第三版)课后习题8.2 (C语言代码)浏览:5229 |
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:349 |
蚂蚁感冒 (C语言代码)浏览:1323 |