漏壶的一生

2023-12-25 13:39:16

题目:

描述
给你一个整数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学习记录?

漏壶名场面:

文章来源:https://blog.csdn.net/2301_80634989/article/details/135160956
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。