螺旋方阵

时间: 1ms        内存:128M

描述:

以下是一个5*5阶螺旋方阵。设计一个程序,输出该形式的n*n阶方阵(顺时针方向旋进)。

 

    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>=1&&n<=20)

输出:

输出对应的n*n阶螺旋方阵。

示例输入:

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

提示:

参考答案(内存最优[0]):

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int matrix[25][25];
void SetMatrix(int x,int y,int start,int n)
{
    int i,j;
    if(n<=0)
        return;
    if(n==1)
    {
        matrix[x][y]=start;
        return;
    }
    for(i=x;i<x+n-1;i++)         
        matrix[y][i]=start++;
    for(j=y;j<y+n-1;j++)         
        matrix[j][x+n-1] = start++;
    for(i=x+n-1;i>x;i--)             
        matrix[y+n-1][i]=start++;
    for(j=y+n-1;j>y;j--)             
        matrix[j][x]=start++;
    SetMatrix(x+1,y+1,start,n-2);     /* 递归 */
}
int main()
{
    int i,j;
    int n;
    scanf("%d",&n);
    SetMatrix(0,0,1,n);
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            printf("%4d",matrix[i][j]);
        printf("\n");
    }
	return 0;
}

参考答案(时间最优[0]):

//实验6.1螺旋方阵
#include <stdio.h>
int main()
{
    int a,b,c,d,i,n,num = 1,array[105][105];
    scanf("%d",&n);
    for (a=0,b=n-1,c=0,d=n-1; a<=b; a++,b--,c++,d--)
    {
        for(i=c; i<=d; i++)array[a][i]=num++;
        for(i=a+1; i<b; i++)array[i][d]=num++;
        for(i=d; i>c; i--)array[b][i]=num++;
        for(i= b; i>a; i--)array[i][c]=num++;
    }
    for (i=0; i<n; i++)
        for (a=0; a<n; a++)
            printf(a!=n-1?" %4d":" %4d\n", array[i][a]);
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。