1、盲听C哈说
哈喽,大家好,我是小C,一个每天嘻嘻哈哈的斜杠女青年。一直受一句话的影响 — "你关注的人,决定你看到的世界!" 今天是2024年12月19日,距离过年只剩一个多月了,总想在今年最后阶段留下些什么,老样子,今天还是给大家分享一道关于二维数组知识点的习题 — 新矩阵。
2、问题描述
(1)题目描述
已知一个n×n(2≤n≤20)的矩阵(方阵),把矩阵二条对角线上的元素值加上10,然后输出这个新矩阵。
(2)输入描述
第一行为n;
下面为一个n×n,矩阵中各正整数小于100。
(3)输出描述
输出新的矩阵。共n行,每行n数,各数之间用一个空格隔开。
(4)样例输入
5
13 66 53 89 55
11 72 61 62 46
90 10 38 10 55
95 20 43 27 19
60 12 66 16 96
(5)样例输出
23 66 53 89 65
11 82 61 72 46
90 10 48 10 55
95 30 43 37 19
70 12 66 16 106
3、问题分析
总体来说,这道题不是很难,关键是要找规律,在找规律之前,首先要明了矩阵对角线的基本含义:矩阵有两条对角线,主对角线和副对角线,如下图所示,黄色标记部分为主对角线,蓝色标记部分为副对角线。
明白了主对角线和副对角线的概念之后,我们就要来找规律,找什么规律呢?就是看一下主对角线上的元素和副对角线的元素在坐标上分别有什么特点。
我们先来看主对角线上的元素,通过观察我们发现:但凡是主对角线上的元素,行下标=列下标, 例如,对于例子当中9x9的方阵而言,主对角线上的元素分别是(1,1)、(2,2)、(3,3)、(4,4)、(5,5)、(6,6)、(7,7)、(8,8)、(9,9)。继续观察发现:但凡是副对角线上的元素:行下标+列下标=固定的值,这个固定的值等于 行数或列数+1,即N+1,当N=9,此时 行下标+列下标 = N+1 = 10。
找到规律这道题就好办了,基本思路为:循环遍历二维数组所有行列下标,但凡行列下标满足如下两个条件的,就把行列下标所对应的元素增加10:① 行下标等于列下标 ② 行下标+列下标等于N+1,而N是我们输入的行数N。因此,我们可以先写出部分核心代码,如下:
for(int i=1;i<=N;i++) {
for(int j=1;j<=N;j++) {
if(i==j || i+j==N+1) {
// 对应数组元素的值+10
}
}
}
值得注意的是,有一个元素既满足i==j的条件,也满足i+j==N+1的条件,是哪个元素呢?请观察下图 ,(5,5)这个点,既是主对角线上的元素,也是副对角线上的元素,但是即使是如此,在代码中我们也不需要做特殊处理,为什么呢?因为if条件中的i==j || i+j==N+1这两个条件,我写的是或者的关系,但凡满足其中一者就将对应元素+10,也就是说即使两者同时满足,也只会加一次10,不会加两次10。我们一起到来看一看本题代码的完整实现。
4、代码实现
#include<bits/stdc++.h> // 包含C++标准库的所有头文件,用于简化代码编写
using namespace std; // 使用标准命名空间,这样可以直接使用cout、cin等而不需要std::前缀
int a[25][25], N; // 定义一个25x25的整数数组a和一个整数N,N用于存储输入的矩阵大小
int main() // 主函数入口
{
cin >> N; // 从标准输入读取N的值,即矩阵的大小
// 双层循环用于读取矩阵的每个元素
for(int i=1; i<=N; i++) // 外层循环控制行,从1到N(包括N)
{
for(int j=1; j<=N; j++) // 内层循环控制列,从1到N(包括N)
{
cin >> a[i][j]; // 读取矩阵的当前元素
// 如果当前元素是主对角线元素(i==j)或副对角线元素(i+j==N+1),则给该元素加10
if(i==j || i+j==N+1)
{
a[i][j] += 10;
}
}
}
// 双层循环用于输出矩阵的每个元素
for(int i=1; i<=N; i++) // 外层循环控制行,从1到N(包括N)
{
for(int j=1; j<=N; j++) // 内层循环控制列,从1到N(包括N)
{
cout << a[i][j] << " "; // 输出矩阵的当前元素,并在元素之间添加空格
}
cout << endl; // 每输出一行后换行
}
return 0; // 程序正常结束
}
这段代码的主要功能是:读取一个NxN的矩阵,对矩阵的主对角线和副对角线上的元素各自加10,然后输出修改后的矩阵。这里假设矩阵的索引是从1开始的,这是在数学和编程中常见的约定。
5、OJ测试
大家写完代码之后如果想要做OJ(在线评测)测试,可以找我要相关的链接,电脑自动评测会更加准确~,也可以找我要相关的经典必刷题单(ps:教学经验中总结出来的必刷题单,真的是一步一步试错得到的经验,难怪人家总是说实践出真知),还是那句话,你关注的人,决定你看到的世界,好了,今天这篇文章就讲到这里,我们下期再见~