3709 - 螺旋矩阵

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

从键盘输入一个整数(1~20)

则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。

例如:

输入数字2,则程序输出:
1 2
4 3
输入数字3,则程序输出:
1 2 3
8 9 4
7 6 5

<span style="line-height:1.5;">要求格式:每个数据宽度为4,左对齐。</span> 


题目输入

题目输出

输入/输出样例

输入格式

4

输出格式

1   2   3   4
12  13  14  5
11  16  15  6
10  9   8   7

C语言解答

#include<stdio.h>
#include<string.h>
int main()
{
	int a[21][21];
	memset(a,0,sizeof(a));
	int n;
	scanf("%d",&n);
	int count=1,e=0;
	int left=0,right=n;
	while(e<=n/2)
	{
		for(int i=left;i<right;i++)
		{
			a[e][i]=count++;
		}
		for(int i=left+1;i<right;i++)
		{
			a[i][n-1-e]=count++;
		}
		for(int i=right-2;i>=left;i--)
		{
			a[n-1-e][i]=count++;
		}
		for(int i=right-2;i>=left+1;i--)
		{
			a[i][e]=count++;
		}
		left++,right--,e++;
	} 
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			printf("%-4d",a[i][j]);
			
			
		}
		
		printf("\n");
	}
	return 0;
} 

C++解答

#include <iostream>
#include <iomanip>
using namespace std;
int M[20][20];
int k=1;
void f(int x,int len)//从坐标x,x这个位置,填充一圈,圈长为len 
{
	int i;
	if(len<=0) return;
	if(len==1) 
		M[x][x]=k;
	else
	{
		for(i=0;i<len-1;i++)
			M[x][x+i]=k++;
		for(i=0;i<len-1;i++)
			M[x+i][x+len-1]=k++;
		for(i=len-1;i>0;i--)
			M[x+len-1][x+i]=k++;
		for(i=len-1;i>0;i--)
			M[x+i][x]=k++;
	}
	f(x+1,len-2);
}
int main()
{
	int n,i,j;
	cin>>n;
	f(0,n);
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			cout<<left<<setw(4)<<M[i][j];
		}
		cout<<endl;
	}
	return 0;
}