当前位置: 首页 > news >正文

老题新解|矩阵转置

《信息学奥赛一本通》第 105 题:矩阵转置

题目描述
输入一个 nnnmmm 列的矩阵 AAA,输出它的转置 ATA^TAT
输入格式
第一行包含两个整数 nnnmmm,表示矩阵 AAA 的行数和列数。1≤n≤1001 \le n \le 1001n1001≤m≤1001 \le m \le 1001m100
接下来 nnn 行,每行 mmm 个整数,表示矩阵 AAA 的元素。相邻两个整数之间用单个空格隔开,每个元素均在 1∼10001 \sim 100011000 之间。
输出格式
mmm 行,每行 nnn 个整数,为矩阵 AAA 的转置。相邻两个整数之间用单个空格隔开。
输入输出样例 #1
输入 #1
3 3
1 2 3
4 5 6
7 8 9
输出 #1
1 4 7
2 5 8
3 6 9

大家好,我是莫小特。
这篇文章给大家带来《信息学奥赛一本通》中的一百零五题:矩阵转置。

image.png

一、题目描述

洛谷的题号是:B2106 矩阵转置

image.png

二、题意分析

这道题是信息学奥赛一本通练习题的第 105 题,主要考察二维数组的应用。

首先根据输入格式的描述,输入一行包括两个整数 n 和 m,代表矩阵的行数和列数,数据范围都在 100 以内,所以使用 int 类型。

int n,m;
cin>>n>>m;

特别提醒,一定要注意输入的顺序,n 在前 m 在后。

接下来要输入 n 行,每行有 m 个整数,代表矩阵 A 的元素,使用 for 循环即可实现。

for(int i=1;i<=n;i++)
{for(int j=1;j<=m;j++){}
}

这些数据因为都需要输出,因此需要一个数据结构来存储,根据题目的意思,选用二维数组最佳,所以定义一个二维数组,并使用嵌套 for 循环输入。

int a[110][110];
for(int i=1;i<=n;i++)
{for(int j=1;j<=m;j++){cin>>a[i][j];}
}

输入完成后,我们来分析题意,根据题目描述,要求输入矩阵之后,直接输出它的转置。

转置是线性代数的内容,如果不太熟悉,我们可以阅读样例输入和样例输出来分析什么是转置。

我们发现样例输入的数据在样例输出中发现了变化,即行变成了列,列变成了行。

image.png

也就相当于说,行变列,列变行,在二维数组的具体表现就是 n 行 m 列的数据转换成 m 行 n 列的数据,所以代码可以用写成下面这样,注意,原来的行变成了列,对应的数据变化一定要正确,原本的行是 n 行,转变成列也应该是 n 列。

输出时,也不要忘记加换行!

for(int j=1;j<=m;j++)//原本的列变成了行 在外层循环
{for(int i=1;i<=n;i++)//原本的行变成了列 在内层循环{cout<<a[i][j]<<" ";//输出数据 用空格分隔}cout<<endl;//不要忘记换行!
}

按样例输入对数据进行验证。

image.png

数据正确,提交到网站测评。

image.png

测试通过!

三、完整代码

该题的完整代码如下:

#include <iostream>
#include <bits/stdc++.h> 
using namespace std;
int main()
{int n,m;cin>>n>>m;int a[110][110];for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];}}for(int j=1;j<=m;j++)//原本的列变成了行 在外层循环{for(int i=1;i<=n;i++)//原本的行变成了列 在内层循环{cout<<a[i][j]<<" ";//输出数据 用空格分隔}cout<<endl;//不要忘记换行!}return 0;
}

四、总结

本题考察了二维数组的定义与应用,以及行列变换的输出逻辑,在解题过程中,有以下几点需要注意:

1、转置的理解

很多没学过线性代数的同学,可能不太了解转置是意思,可以通过阅读样例输入和样例输出来辅助理解,利用现有提示来理解会比查阅资料更加方便。

2、转置的实现
输出时将原矩阵的列作为外层循环,原行作为内层循环,即 for(j) 外层,for(i) 内层,完成矩阵转置的逻辑。

---end---

如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、关注我哦!
如果你有更好的方法,可以在评论区留言哦,一起进步~

我们下集见~

http://www.dtcms.com/a/273010.html

相关文章:

  • AI驱动的业务系统智能化转型:从非结构化到结构化的智能转换
  • 【STM32 学习笔记】FLASH闪存
  • pytorch学习-12循环神经网络(基础篇)
  • 机器视觉之激光码检测系统
  • 【世纪龙科技】学测-汽车信息化综合实训考核平台(机电方向)
  • 数字孪生系统如何助力汽车零部件企业实现虚拟智控
  • RedisJSON 内存占用剖析与调优
  • Lua嵌入式爬虫实现步骤
  • 【Linux系统】冯诺依曼体系结构 | 初识操作系统
  • 生产者、消费者问题(C语言、POSIX)
  • 测试覆盖标准-条件覆盖-短路求值
  • 全新开源AI知识库系统!PandaWiki一键构建智能文档,支持AI问答、创作与搜索!
  • [特殊字符] 05_Jenkins 部署前端项目实现自动化部署
  • rv1106使用笔记
  • 【RL-VLM-F】算法框架图绘图学习笔记
  • ubuntu server配置静态IP
  • ​​​​​​​微软PowerBI PL-300认证考试报名入口及费用
  • 【PTA数据结构 | C语言版】顺序队列的3个操作
  • 完美卸载 Ubuntu 双系统:从规划到实施的完整指南
  • 乐鑫代理商飞睿科技,ESP32模组重塑AIoT体验的四大技术支柱
  • C++类型萃取(Type Traits):深入解析std::enable_if与std::is_same
  • git fetch的使用
  • 【第五章-基础】Python 函数---以一个初学者来理解函数
  • 第十六天,7月10日,八股
  • 【网络安全】利用 Cookie Sandwich 窃取 HttpOnly Cookie
  • vue中token的使用与统计实践
  • android闪光灯源码分析
  • Android 插件化实现原理详解
  • 【读书笔记】如何画好架构图:架构思维的三大底层逻辑
  • 遥感影像图像分割-地物提取模型训练与大图直接推理流程