二维数组 螺旋方阵

所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。

输入格式:

输入在一行中给出一个正整数N(<10)。

输出格式:

输出N×N的螺旋方阵。每行N个数字,每个数字占3位。

输入样例:

5

输出样例:

  1  2  3  4  5
 16 17 18 19  6
 15 24 25 20  7
 14 23 22 21  8
 13 12 11 10  9

思路讲解:

本题要求输出一个规模为n*n的螺旋矩阵。使用一个二维数组a[10][10]来存储螺旋方阵,使用变量k来表示当前要填充的数字,变量x和y表示当前的行和列,变量t表示当前圈的边长。然后就要进行循环,循环的次数为n/2,顺时针填入k的值。使用两个嵌套的for循环来循环填充每一圈,外层循环控制填充的圈数,内层循环分别填充每一条边。在每一圈中,首先从左到右填充一行,然后从上到下填充一列,接着从右到左填充一行,最后从下到上填充一列。每填充完一条边后,更新x和y的值,继续填充下一条边。在填充完所有圈后,如果n为奇数,还需要单独处理中心位置。 

最后,代码使用两个嵌套的for循环遍历二维数组,输出结果。(注意每个数字占3位)

完整代码:

#include <stdio.h>

int main()
{
    int n;
    scanf("%d",&n);
    int a[10][10],k=1,x=0,y=0;
    int t=n-1;
    for(int i=0;i<n/2;i++){
        for(int j=0;j<t;j++) a[x][y++]=k++;
        for(int j=0;j<t;j++) a[x++][y]=k++;
        for(int j=0;j<t;j++) a[x][y--]=k++;
        for(int j=0;j<t;j++) a[x--][y]=k++;
        x++;y++;t-=2;
    }
    if(n%2!=0) a[n/2][n/2]=k;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            printf("%3d",a[i][j]);
        }
        printf("\n");
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值