c++回型方阵2

回型方阵2

描述

输入一个正整数 n,输出 n×n 的回型方阵。例如,n=5 时,输出:

3 3 3 3 3

3 2 2 2 3

3 2 1 2 3

3 2 2 2 3

3 3 3 3 3

输入

一行一个正整数 n,2≤n≤9。

输出

共 n 行,每行包含 n 个正整数,之间用一个空格隔开。

输入样例 1 

3

输出样例 1

2 2 2
2 1 2
2 2 2

提示

注意:行末没有空格。

#include<iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int matrix[9][9];  // 最大为9x9的方阵

    // 初始化方阵的每个数字为0
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            matrix[i][j] = 0;
        }
    }

    // 填充方阵每一层
    int num = (n + 1) / 2;  // 计算最外层的数字
    for (int layer = 0; layer < num; ++layer) {
        // 填充上边
        for (int i = layer; i < n - layer; ++i) {
            matrix[layer][i] = num - layer;
        }
        // 填充右边
        for (int i = layer; i < n - layer; ++i) {
            matrix[i][n - layer - 1] = num - layer;
        }
        // 填充下边
        for (int i = layer; i < n - layer; ++i) {
            matrix[n - layer - 1][i] = num - layer;
        }
        // 填充左边
        for (int i = layer; i < n - layer; ++i) {
            matrix[i][layer] = num - layer;
        }
    }

    // 输出方阵
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            cout << matrix[i][j];
            if (j < n - 1) cout << " ";  // 在同一行的数字间加空格
        }
        cout << endl;  // 每行结束后换行
    }

    return 0;
}

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回型方阵是一种特殊的方阵,其元素按照回字形排列。给定一个正整数n,我们需要输出一个n×n的回型方阵。 思路: 1. 首先我们可以创建一个n×n的二维数组matrix,并初始化每个元素为0。 2. 定义四个变量top、bottom、left、right,分别表示当前方阵的上边界、下边界、左边界和右边界。 3. 定义一个计数器count,初始值为1。表示将要填充的下一个数字。 4. 使用一个while循环进行填充操作,判断条件为left <= right and top <= bottom。 5. 从左到右填充top行,即将count从left到right依次赋值给matrix[top][i],同时count加一。 6. 当top行填充完后,将top加一,表示上边界已经向下移动一行。 7. 接着从上到下填充right列,即将count从top到bottom依次赋值给matrix[i][right],同时count加一。 8. 当right列填充完后,将right减一,表示右边界已经向左移动一列。 9. 继续从右到左填充bottom行,即将count从right到left依次赋值给matrix[bottom][i],同时count加一。 10. 当bottom行填充完后,将bottom减一,表示下边界已经向上移动一行。 11. 最后从下到上填充left列,即将count从bottom到top依次赋值给matrix[i][left],同时count加一。 12. 当left列填充完后,将left加一,表示左边界已经向右移动一列。 13. 当while循环结束后,即每个位置都被正确填充了之后,我们输出matrix即可。 下面是具体的代码实现: ```python def generateMatrix(n): matrix = [[0] * n for _ in range(n)] top, bottom, left, right = 0, n - 1, 0, n - 1 count = 1 while left <= right and top <= bottom: for i in range(left, right + 1): matrix[top][i] = count count += 1 top += 1 for i in range(top, bottom + 1): matrix[i][right] = count count += 1 right -= 1 for i in range(right, left - 1, -1): matrix[bottom][i] = count count += 1 bottom -= 1 for i in range(bottom, top - 1, -1): matrix[i][left] = count count += 1 left += 1 return matrix n = 5 matrix = generateMatrix(n) for row in matrix: print(row) ``` 以上代码会输出一个5×5的回型方阵: ``` [1, 1, 1, 1, 1] [2, 0, 0, 0, 1] [2, 0, 0, 0, 1] [2, 0, 0, 0, 1] [2, 2, 2, 2, 2] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值