漏壶的一生

题目:

描述
给你一个整数n,按要求输出n∗n的回型矩阵

输入描述:
输入一行,包含一个整数n

1<=n<=19
输出描述:
输出n行,每行包含n个正整数.

示例1

输入:
4
输出:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

思路:

当输入一个正整数n时,代码会生成一个n × n的螺旋矩阵。

首先,定义了一个二维数组a[100][100]来存储生成的螺旋矩阵。

然后,定义了四个变量right、left、up和down来表示螺旋矩阵的边界位置,初始时right的值为n-1,left的值为0,up的值为0,down的值为n-1。这样我们就可以确定填充数字的范围。

接着,定义了一个变量num,初始值为1,用于逐个填充螺旋矩阵中的数字。

接下来,使用一个while循环来进行螺旋填充的过程,循环条件是left <= right和up <= down,即边界条件没有相交。

在每次循环中,首先从左到右填充上边界,即从left到right,将数字依次赋值给a[up][i],同时num自增。

然后,将up的值加1,表示上边界向下移动一行。

接着,从上到下填充右边界,即从up到down,将数字依次赋值给a[i][right],同时num自增。

然后,将right的值减1,表示右边界向左移动一列。

接下来,从右到左填充下边界,即从right到left,将数字依次赋值给a[down][i],同时num自增。

然后,将down的值减1,表示下边界向上移动一行。

最后,从下到上填充左边界,即从down到up,将数字依次赋值给a[i][left],同时num自增。

最后,将left的值加1,表示左边界向右移动一列。

这样循环执行,直到边界条件相交为止,此时螺旋矩阵的填充完成。

最后,使用两个嵌套的for循环遍历二维数组a,并打印出螺旋矩阵的内容。

答案:

#include<stdio.h>

int main()
{
    int n;
    scanf("%d", &n);  // 输入矩阵的大小

    int a[100][100];  // 定义一个二维数组来存储螺旋矩阵
    int right = n - 1;  // 右边界位置
    int left = 0;  // 左边界位置
    int up = 0;  // 上边界位置
    int down = n - 1;  // 下边界位置
    int num = 1;  // 要填充的数字

    while (left <= right && up <= down)  // 循环条件是边界没有相交
    {
        for (int i = left; i <= right; i++)  // 填充上边界
        {
            a[up][i] = num;  // 将数字赋值给a[up][i]
            num++;  // 数字自增
        }
        up++;  // 上边界向下移动一行

        for (int i = up; i <= down; i++)  // 填充右边界
        {
            a[i][right] = num;  // 将数字赋值给a[i][right]
            num++;  // 数字自增
        }
        right--;  // 右边界向左移动一列

        for (int i = right; i >= left; i--)  // 填充下边界
        {
            a[down][i] = num;  // 将数字赋值给a[down][i]
            num++;  // 数字自增
        }
        down--;  // 下边界向上移动一行

        for (int i = down; i >= up; i--)  // 填充左边界
        {
            a[i][left] = num;  // 将数字赋值给a[i][left]
            num++;  // 数字自增
        }
        left++;  // 左边界向右移动一列
    }

    for (int i = 0; i < n; i++)  // 遍历二维数组并打印螺旋矩阵
    {
        for (int j = 0; j < n; j++)
        {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }

    return 0;
}

                                                                                                                         2023/12/22学习记录 

漏壶名场面:

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值