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


变态的蛇形填数,恶心的循环控制............

很久以前就见识过这个题,只是无从下手啊,好在现在学的东西多了点,敢做了....然后开始敲代码,需要用个二维数组来存储每个值,然后双循环输出.....

第一次做这样的题,也是无从下手,循环调了半天,才总算运行成功,提交 ac 了........这个题完全是循环控制格式的题,基本上不需要思路,唯一需要注意的是,需要多个循环分别控制二维数组的填数顺序,有四条边,所以需要四个,还需要来回转圈打表,所以外层也需要一个循环...............


#include<stdio.h>
#include<string.h>
int x[105][105];
int main()
{
	int n,i,j,k,l,s;;
	while(~scanf("%d",&n))
	{
		s=1;
		for(i=0;i<n;++i)//控制打的长度以及次数.....
		{
			for(j=i;j<n-i;++j)//控制 从上到下
			{
				x[j][n-i-1]=s++;
			}
			for(j=n-i-2;j>=i;--j)//控制 从右到左
			{
				x[n-i-1][j]=s++;
			}
			for(j=n-i-2;j>=i;--j)//控制 从下到上
			{
				x[j][i]=s++;
			}
			for(j=i+1;j<n-i-1;++j)//控制 从左到右
			{
				x[i][j]=s++;
			}
		}
		for(i=0;i<n;++i)
		{
			for(j=0;j<n-1;++j)
			{
				printf("%d ",x[i][j]);
			}
			printf("%d\n",x[i][j]);
		}
	}
	return 0;
}


你可能感兴趣的:(33 蛇形填数)