欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 使用 C/C++ 打印螺旋矩阵并格式化输出

使用 C/C++ 打印螺旋矩阵并格式化输出

2025/6/19 20:21:37 来源:https://blog.csdn.net/jiang_sanmu/article/details/148736274  浏览:    关键词:使用 C/C++ 打印螺旋矩阵并格式化输出

一、引言

在编程中,螺旋矩阵 是一个经典的二维数组操作问题。它的核心思想是:按照顺时针或逆时针方向,依次将数字 1 填入一个 n×n 的矩阵中。

本篇文章将详细介绍如何用 C/C++ 编写程序实现螺旋矩阵填充 ,并介绍如何使用 printfsetw() 进行对齐美观的格式化输出


二、螺旋矩阵填充原理

我们以 顺时针螺旋填充 为例:

  • 从右上角开始(即位置 (0, n - 1));
  • 按照四个方向循环移动:
    1. 向下
    2. 向左
    3. 向上
    4. 向右
  • 每次移动前检查是否越界或已经填过值;
  • 当所有格子填满后停止。

三、完整代码实现(C++ 版)

#include <bits/stdc++.h>
using namespace std;
int main(){int n;cin >> n;int a[10][10];memset(a, 0, sizeof(a));int x = 0, y = n - 1;int cnt = 1;a[x][y] = cnt++;while (cnt <= n * n){// 向下走while (x + 1 < n && a[x + 1][y] == 0)a[++x][y] = cnt++;// 向左走while (y - 1 >= 0 && a[x][y - 1] == 0)a[x][--y] = cnt++;// 向上走while (x - 1 >= 0 && a[x - 1][y] == 0)a[--x][y] = cnt++;// 向右走while (y + 1 < n && a[x][y + 1] == 0)a[x][++y] = cnt++;}// 使用 printf 格式化输出for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){printf("%3d", a[i][j]);}printf("\n");}return 0;
}

四、格式化输出技巧

1. 使用 printf("%3d", a[i][j])

这是 C 语言中的格式化输出方式,%3d 表示输出至少占 3 个字符宽度,不足补空格,适合数字对齐。

示例输出(n = 4):

10 11 12 13

9 2 3 14

9 1 4 15

7 6 5 16

2. 使用 C++ 的 setw(3)

如果你更喜欢使用 C++ 风格的输出,可以使用 <iomanip> 中的 setw() 函数:

#include <iomanip>

for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cout << setw(3) << a[i][j];
}
cout << endl;
}

五、常见问题与注意事项

问题

解决方案

初始化错误导致数据被清空

memset应该在赋初值之前调用

死循环或漏填某些格子

控制每次移动的方向和边界条件

输出不整齐

使用printf("%3d")setw(3)美化输出

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词