南阳理工acm33蛇形填数

蛇形填数

http://acm.nyist.net/JudgeOnline/problem.php?pid=33

时间限制: 3000 ms | 内存限制: 65535 KB
难度: 3
描述
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入
直接输入方陈的维数,即n的值。(n<=100)
输出
输出结果是蛇形方陈。
样例输入
3

样例输出
7 8 1

6 9 2

5 4 3

#include<stdio.h>

int main()

{

	int i,j,k,t,n,s[100][100];

	while(scanf("%d",&n)!=EOF)

	{

		t=1;

		for(k=0;k<n/2;k++)

		{

			j=n-1-k;

			for(i=k;i<n-k;i++)

				s[i][j]=t++;

			i--;

			for(j=n-2-k;j>=k;j--)

				s[i][j]=t++;

			j++;

			for(i=n-2-k;i>=k;i--)

				s[i][j]=t++;

			i++;

			for(j=k+1;j<n-k-1;j++)

				s[i][j]=t++;

		}

		if(n%2)s[n/2][n/2]=t;

		for(i=0;i<n;i++)

		{

			for(j=0;j<n;j++)

				printf("%d ",s[i][j]);

			printf("\n");

		}

	}

	return 0;

}







#include<stdio.h>  

#include<string.h>  

int a[100][100];  

int main()  

{  

	int n,i,j,num=0;  

	scanf("%d",&n);  

	memset(a,0,sizeof(a));  

	i=0;  

	j=n-1;  

	a[i][j]=1;  

	num=1;  

	while(num<n*n)  

	{  

		while(j+1<n&&a[i][j+1]==0)     

			a[i][++j]=++num;        

		while(i+1<n&&a[i+1][j]==0)    

			a[++i][j]=++num;     

		while(j-1>=0&&a[i][j-1]==0)     

			a[i][--j]=++num;     

		while(i-1>=0&&a[i-1][j]==0)     

			a[--i][j]=++num;    

	}  

	for(i=0;i<n;++i)  

	{  

		for(j=0;j<n;++j)  

			printf("%d ",a[i][j]);  

		printf("\n");      

	}  

	return 0;  

}

你可能感兴趣的:(ACM)