1、盲听C哈说
哈喽,大家好,我是小C,一个每天嘻嘻哈哈的斜杠女青年。一直受一句话的影响 — "你关注的人,决定你看到的世界!" 今天个人有些事情要处理,忙到现在才更新,现在是2024年12月23日早上10点,距离过年只剩一个多月了,总想在今年最后阶段留下些什么,今天给大家分享一道关于二维数组知识点的习题 — 计算矩阵边缘元素之和。
2、问题描述
(1)题目描述
输入一个整数矩阵,计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。
(2)输入描述
第一行分别为矩阵的行数m和列数n(m<100,n<100),两者之间以一个空格分开。
接下来输入的m行数据中,每行包含n个整数,整数之间以一个空格分开。
(3)输出描述
输出对应矩阵的边缘元素和。
(4)样例输入
3 3
3 4 1
3 7 1
2 0 1
(5)样例输出
15
3、问题分析
和上一道题(矩阵交换行)类似,这道题重点在考查学生对矩阵特定元素行下标和列下标规律的发现与总结,即:对于一个矩阵而言,第一行、最后一行、第一列、最后一列分别都有些什么特点。
以样例进行说明:边缘元素之和为 3+4+1+1+1+0+2+3=15
明白了题意之后,下一步应该是想一想在二维数组中第一行、第一列、最后一行、最后一列怎么表示,有什么规律?还是以样例进行说明,元素位置标记图如下:
根据上图我们就可以总结得到规律,即本题核心解题思路:循环变量m行n列的二维数组,但凡行下标是1或者列下标是1的元素,都累加起来,但凡行行下标是m,列下标是n的也都累加起来。
//m行数据
for(int i=1;i<=m;i++) {
//n列数据
for(int j=1;j<=n;j++) {
//边缘元素下标特点
if(i==1||j==1||i==m||j==n) {
//累加对应的边缘元素
sum += a[i][j];
}
}
}
具体流程步骤如下图所示:
本题考察了如下知识点:① 对数组和矩阵的基本操作,包括读取、存储和修改。② 条件判断:需要使用条件判断来识别边缘元素。③ 输入输出处理:需要处理多行输入,并按要求格式输出结果。用任何一种编程语言都能够实现程序功能,在这里,使用C++代码来实现。
4、代码实现
#include <bits/stdc++.h> // 包含C++标准库的所有头文件,用于简化代码编写
using namespace std; // 使用标准命名空间,这样可以直接使用cout、cin等而不需要std::前缀
// 定义一个110x110的整数数组a,两个整数m和n用于存储输入的矩阵的行数和列数,一个整数sum用于存储矩阵边界元素的和
int a[110][110], n, m, sum;
int main() // 主函数入口
{
cin >> m >> n; // 从标准输入读取矩阵的行数m和列数n
// 双层循环用于读取矩阵的每个元素,并计算边界元素的和
for(int i=1; i<=m; i++) // 外层循环控制行,从1到m(包括m)
{
// 内层循环控制列,从1到n(包括n)
for(int j=1; j<=n; j++)
{
cin >> a[i][j]; // 读取矩阵的当前元素
// 如果当前元素位于矩阵的边界上,则将其加到sum中
if (i==1 || j==1 || i==m || j==n)
{
// 将边界元素的值加到sum中
sum += a[i][j];
}
}
}
// 输出矩阵边界元素的和
cout << sum;
return 0; // 程序正常结束
}
这段代码的主要功能是读取一个m行n列的矩阵,计算并输出矩阵边界(包括最外层的四条边)上所有元素的和。这里假设矩阵的索引是从1开始的,这是在数学和编程中常见的约定。
5、OJ测试
大家写完代码之后如果想要做OJ(在线评测)测试,可以找我要相关的链接,电脑自动评测会更加准确~,也可以找我要相关的经典必刷题单(ps:教学经验中总结出来的必刷题单,真的是一步一步试错得到的经验,难怪人家总是说实践出真知),还是那句话,你关注的人,决定你看到的世界,最近大家都在准备期末考试,没时间刷题哈哈~,好了,今天这篇文章就讲到这里,我们下期再见。