C++ 实现回形矩阵打印算法 - 详细代码解析

题目描述:

输入一个正整数 n,试打印输出 n*n 的回形矩阵(每个元素占 4 位场宽)。

输入:

一行,一个整数 n (1 ≤ n ≤ 20)。

输出:

一个 nn 列的回形矩阵。

样例组

样例输入 1:

6

样例输出 1:

1   1   1   1   1   1
1   2   2   2   2   1
1   2   3   3   2   1
1   2   3   3   2   1
1   2   2   2   2   1
1   1   1   1   1   1

C++ 代码:

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    int matrix[n][n];
    int startRow = 0, endRow = n-1, startCol = 0, endCol = n-1;
    int num = 1;
    
    while (startRow <= endRow && startCol <= endCol) {
        for (int i = startCol; i <= endCol; i++) {
            matrix[startRow][i] = num;
            num++;
        }
        startRow++;
        
        for (int i = startRow; i <= endRow; i++) {
            matrix[i][endCol] = num;
            num++;
        }
        endCol--;
        
        for (int i = endCol; i >= startCol; i--) {
            matrix[endRow][i] = num;
            num++;
        }
        endRow--;
        
        for (int i = endRow; i >= startRow; i--) {
            matrix[i][startCol] = num;
            num++;
        }
        startCol++;
    }
    
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cout << setw(4) << matrix[i][j];
        }
        cout << endl;
    }
    
    return 0;
}

代码解析:

  1. 初始化:

    • 声明一个二维数组 matrix,大小为 n*n,用于存储回形矩阵元素。
    • 初始化四个变量 startRowendRowstartColendCol,分别代表矩阵的起始行、结束行、起始列、结束列。
    • 初始化变量 num 为 1,用于填充矩阵元素的值。
  2. 循环遍历:

    • 使用 while 循环,循环条件为 startRow <= endRowstartCol <= endCol,即当起始行小于等于结束行,且起始列小于等于结束列时,继续循环遍历。
    • 在每次循环中,按照以下步骤填充矩阵元素:
      • 从左到右填充一行:for (int i = startCol; i <= endCol; i++)
      • 从上到下填充一列:for (int i = startRow; i <= endRow; i++)
      • 从右到左填充一行:for (int i = endCol; i >= startCol; i--)
      • 从下到上填充一列:for (int i = endRow; i >= startRow; i--)
    • 每填充完一圈,更新起始行、结束行、起始列、结束列的值,使下一圈填充从新的位置开始。
  3. 打印矩阵:

    • 使用嵌套 for 循环,遍历 matrix 数组,并将每个元素以 4 位场宽打印输出。

总结:

该 C++ 代码实现了回形矩阵打印算法,通过控制循环遍历的顺序和起始位置,能够按照回形顺序填充矩阵元素。

练习:

尝试修改代码,实现以下功能:

  • 改变矩阵的填充顺序,例如从右上角开始填充。
  • 控制矩阵元素的值,例如按照递增的平方数填充。
  • 将回形矩阵打印成螺旋形矩阵。

提示:

  • 在修改代码时,注意更新起始位置和填充顺序。
  • 可以使用 setw() 函数控制输出的场宽。
  • 可以参考螺旋矩阵的填充方式,进行代码修改。

希望这篇文章能够帮助您理解回形矩阵打印算法的实现过程。

C++ 实现回形矩阵打印算法 - 详细代码解析

原文地址: https://www.cveoy.top/t/topic/pZMy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录