解题思路:
(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语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1019 |
C语言程序设计教程(第三版)课后习题8.3 (Java代码)浏览:1402 |
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:674 |
C语言程序设计教程(第三版)课后习题9.1 (Java代码)浏览:481 |
计算质因子 (C++代码)浏览:1824 |
输出正反三角形 (C语言代码)格式错误!!!浏览:1177 |
P1001 (C语言代码)浏览:836 |
字符逆序 (C语言代码)浏览:645 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:561 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:585 |