1. 程式人生 > >33 蛇形填數

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;
}