漏壶的一生
题目:
描述
给你一个整数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学习记录?
漏壶名场面:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!