C++实现矩阵循环左移:代码解析、实现与优化
这段代码实现了一个矩阵的循环左移功能。以下是对代码的详细解释和补充: 代码解析 1. 函数声明与定义: - `rotateleft(int a[][100], int n, int m)`:这是一个用于将一个 `n x n` 的矩阵左循环移动 `m` 位的函数。它直接在原数组上进行操作,不返回任何值。 2. 主函数 (`main`) 流程: - 定义一个 `100 x 100` 的二维数组 `a` 来存储输入的矩阵。 - 从标准输入读取矩阵的大小 `n` 和要左移的位数 `m`。 - 读取 `n x n` 矩阵的元素并存储到数组 `a` 中。 - 调用 `rotateleft` 函数对矩阵进行左移操作。 - 输出左移后的矩阵。 3. `rotateleft` 函数实现: - 目前该函数内部为空,需要添加具体的实现逻辑。 补充 `rotateleft` 函数的实现 为了实现矩阵的循环左移,可以按照以下步骤进行: - 将每一行向左移动 `m` 位。 - 对于超出边界的部分,将其移动到行尾。 下面是完整的 `rotateleft` 函数实现: ```cpp void rotateleft(int a[][100], int n, int m) { // 创建一个临时数组来保存每行左移后的结果 int temp[100][100]; // 计算实际需要移动的位数(考虑到可能大于n的情况) m = m % n; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { if (j < m) { // 处理超出边界的元素,放到行尾 temp[i][j + n - m] = a[i][j]; } else { // 正常左移 temp[i][j - m] = a[i][j]; } } } // 将临时数组的结果复制回原数组 for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { a[i][j] = temp[i][j]; } } } ``` 改进与优化 上述实现方式使用了额外的临时数组来保存中间结果。如果希望减少空间复杂度,可以考虑直接在原数组上进行操作,通过多次交换元素来实现左移。以下是改进后的版本: ```cpp void rotateleft(int a[][100], int n, int m) { // 计算实际需要移动的位数(考虑到可能大于n的情况) m = m % n; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { // 保存当前行的第一个元素 int first = a[i][0]; for (int k = 0; k < n - 1; ++k) { a[i][k] = a[i][k + 1]; } // 将第一个元素放到行尾 a[i][n - 1] = first; } } } ``` 这个版本直接在原数组上进行操作,减少了额外的空间开销。每次左移一位,重复 `m` 次即可完成整个矩阵的左移操作。 ######[AI摘要生成 | 793点数解答 | 2024-12-24 19:13:59]
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)464
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)356
- C++ 实现:轻松计算两个矩阵的乘法并输出结果(字节豆包 | 381点数解答 | 2025-12-03 19:20:23)111
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)345
- C++实现读取数字并输出最小值的代码及解释(字节豆包 | 113点数解答 | 2026-03-20 19:32:56)9
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)278
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)308
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)313
- 工程师揭秘:二进制左移操作,为何能让数字翻倍? (百度文心 | 178点数解答 | 2023-11-09 18:24:56)124
- 易语言实现机械臂多动作组合控制:含保存、顺序执行与超限提示!(字节豆包 | 1872点数解答 | 2025-09-05 20:58:18)66
- 易语言实现机械臂控制手机屏幕物理动作:多功能集成与安全执行方案(DeepSeek | 1387点数解答 | 2025-09-05 21:01:53)73
- 烛龙战队武器强化:C++实现按位运算提升攻击力(字节豆包 | 188点数解答 | 2026-02-28 20:34:21)19