C 语言螺旋图案

2025年1月7日 | 5 分钟阅读

在 C 语言中,2D 螺旋模式是指在二维数组中以螺旋形状排列元素。这种模式在诸如矩阵遍历之类的编程任务中很常见,其中必须按指定顺序访问元素。如果要创建 2D 螺旋设计,请使用嵌套循环和四个变量来跟踪螺旋的上、下、左、右边界

示例

输入

4

输出

1 2 3 4

12 13 14 5

11 16 15 6

10 9 8 7

方法

  1. 创建一个 n 维 2D 数组。
  2. 在边界变量中,存储数组的边界。它将从n-1开始,并在每次旋转后更改。
  3. 在变量sizeLeft中,保存用于螺旋打印的剩余大小。它将从n-1开始,并在每两次旋转后减 1。
  4. 创建一个标志来识别两次旋转,因为sizeLeft将在每两次旋转后减少。
  5. 创建一个字符属性move,用于存储螺旋模式的当前移动。它可以包含字母'r'表示向右,'l'表示向左,'d'表示向下,'u'表示向上。
  6. 重复以下步骤,直到“i”[1, n2]范围内:
  7. i的值赋给螺旋模式。
  8. 确定下一个模式的移动。
  9. 检查模式是否已达到边界。如果达到这一点,请更改大小并旋转螺旋设计。
  10. 将模式打印为 2D 数组。

C 语言螺旋模式程序

让我们举一个例子来说明 C 语言中的螺旋模式。

文件名:Pattern. c

输出

Enter the size of the square matrix: 3
 1  2  3 
 8  9  4 
 7  6  5 
Enter the size of the square matrix: 9
1  2  3  4  5  6  7  8  9 
32 33 34 35 36 37 38 39 10 
31 56 57 58 59 60 61 40 11 
30 55 72 73 74 75 62 41 12 
29 54 71 80 81 76 63 42 13 
28 53 70 79 78 77 64 43 14 
27 52 69 68 67 66 65 44 15 
26 51 50 49 48 47 46 45 16 
25 24 23 22 21 20 19 18 17 

说明

  • generateSpiral函数接受一个整数n作为输入,表示方阵的大小。
  • 在该方法内声明一个大小为n x n2D 整型数组 matrix,用于存储螺旋模式。
  • 矩阵的边界由四个变量表示:top、bottom、left 和 right。top 最初设置为0,bottom 设置为n - 1,left 设置为0,right 设置为n - 1
  • 另一个整型变量num被设置为1。此变量记录要填充到矩阵中的值,从 1 开始。
  • 程序进入while 循环,直到 top 边界小于或等于 bottom 边界,并且 leftmost 边界小于或等于 right 边界。此循环可确保螺旋模式被准确创建。
  • 在循环内部使用四个循环以四个方向填充矩阵:右、下、左和上。每个方向占据螺旋的一侧。
  • 向右移动:第一个循环从左到右遍历行,用从 num 到num + (right - left)的值填充。
  • 向下移动:第二个循环从上到下进行,用从 num 到num + (bottom - top)的值填充右侧列。
  • 向左移动:第三个循环从右到左进行,用从 num 到num + (right - left)的值以相反的顺序填充底部边界的行。
  • 向上移动:第四个循环从下到上进行,用从 num 到num + (bottom - top)的值以相反的顺序填充左侧边界的每一列。
  • 在填充每个方向后,会修改相关边界(top、bottom、left 或 right),以表明螺旋的一侧已完成。
  • 在填充矩阵中的每个值后,num 变量会递增。
  • 循环结束后,通过迭代矩阵数组来打印创建的螺旋模式,并对每个元素进行适当格式化。
  • main 函数从用户输入中获取方阵的大小 (n),并运行 generate spiral 函数来生成和打印螺旋模式。

时间复杂度 (O(n^2))

generateSpiral 函数的主要迭代会运行,直到 top 小于或等于 bottom 且 left 小于或等于 right。在最坏的情况下,这个循环将运行n/2次,因为 top、bottom、left 和 right 边界会向矩阵中心移动。

在循环的每次迭代中,我们有四个相互关联的循环,它们遍历矩阵的行和列。这些嵌套循环在每个方向上会迭代一定的次数。

因此,在最坏情况下的总重复次数约为4 * n/2 * n,压缩为O(n^2)

空间复杂度 (O(n^2))

矩阵数组的大小,声明为int matrix[n][n],决定了空间复杂度。该数组包含 n 行和 n 列,共 n2 个元素。

每个矩阵数组元素都存储一个整数值。

因此,空间复杂度为O(n^2),因为它随输入大小 n 的增加而显著增长。