螺旋方阵

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

输入格式:

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

输出格式:

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

思路:

1. 按→方向填充,当数组元素值不是-1时,切换方向到 ↓

2. 继续沿 ↓ 填充,当数组元素值不是-1时,切换方向为←

3. 继续沿←填充,当数组元素值不是-1时,切换方向为 ↑

4. 继续沿 ↑ 填充,当数组元素值不是-1时,切换方向为→(回到第1步)

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    int n, a[15][15]/*={0}*/;
    memset(a, 0, sizeof(a));//a内所有元素变为0
    scanf("%d", &n);
    int i = 1, j = 1, k = 1;
    while(k <= n * n)
    {
        while(j <= n)
        {
            if(!a[i][j])
                a[i][j++] = k++;
            else break;
        }
        j--;
        i++;
        while(i <= n)
        {
            if(!a[i][j])
                a[i++][j] = k++;
            else break;
        }
        i--;
        j--;
        while(j > 0)
        {
            if(!a[i][j])
                a[i][j--] = k++;
            else break;
        }
        j++;
        i--;
        while(i > 0)
        {
            if(!a[i][j])
                a[i--][j] = k++;
            else break;
        }
        i++;
        j++;
    }
    for(i = 1; i <= n; i++)
    {
        for(j = 1; j < n; j++)
            printf("%3d", a[i][j]);
        printf("%3d
", a[i][j]);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/mayouyou/p/8650171.html