原题链接:二级C语言-寻找矩阵最值
题目 1069: [二级C语言]寻找矩阵最值
时间限制: 1Sec 内存限制: 128MB 提交: 4609 解决: 3212
题目描述
输入一个正整数n (1≤ n ≤6),再输入一个n 行n列的矩阵,找出该矩阵中绝对值最大的元素以及它的行下标和列下标。
输入
n
nxn
输出
数 行 列
样例输入
2
1 2
3 4
样例输出
4 2 2
问题分析与思考:
这道题当然一看到我首选的是用二维数组分配空间来做这道题,但是我们在编写程序时尽量使算法能耗时低,占用空间少,就借鉴了大佬的想法,虚拟一个二维数组的存在,但实际并未对其分配空间,只分配一个a,反复地在类似于对二维数组的操作的循环中去寻找最大值,这个最大值的行和列也刚好是循环到的i和j的位置,最后根据题目要求按格式输出。
完整清晰的代码:
#include <iostream>
#include <math.h>
using namespace std;
//虚拟一个二维数组的赋值过程,实际并没有分配一个二维数组空间
int main(){
int n,a;
int maxFabs,hang,lie;
cin>>n;
//初始化输入并寻找绝对值最大的元素和对应的行、列
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a;
if(fabs(a)>fabs(maxFabs)){
maxFabs=a;
hang=i+1;lie=j+1 ;
}
}
}
//根据题目要求按格式输出
cout<<a<<" "<<hang<<" "<<lie;
return 0;
}
这里贴了一个带有我思考的代码:
(我敲代码时总喜欢在后边写注释,絮絮叨叨自己的想法)
#include <iostream>
#include <math.h>
using namespace std;
int main(){
int n;
//int num[6][6];
int a;
//可能也并不需要真的去定义一个二维数组
//因为我们只需要去寻找到他其中的最大值,只是一个值
//和相对应的行和列(就是当是两个循环刚好i,j到的位置对应的i,j的值 )
int maxFabs,hang,lie;
cin>>n;
//初始化输入并寻找绝对值最大的元素
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a;
if(fabs(a)>fabs(maxFabs)){
maxFabs=a;
hang=i+1;lie=j+1 ;
}
}
}
/*//可能并不需要这一步
//再做一次循环去找到这个值所在的行和列
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(maxFabs==num[i][j])
hang=i;lie=j;
}
}*/
cout<<a<<" "<<hang<<" "<<lie;
return 0;
}
7.3 分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复