螺旋方阵
时间: 1ms 内存:128M
描述:
以下是一个5*5阶螺旋方阵。设计一个程序,输出该形式的n*n阶方阵(顺时针方向旋进)。
1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 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;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。