1. 程式人生 > >仙人球的殘影

仙人球的殘影

在美麗的HDU,有一名大三的同學,他的速度是眾所周知的,跑100米僅僅用了2秒47,在他跑步過程中會留下殘影的哎,大家很想知道他是誰了吧,他叫仙人球,既然名字這樣了,於是他的思想是單一的,他總是喜歡從一點出發,經過3次轉折(每次向右轉90°),回到出發點,而且呢,他每次轉折前總是跑相同長度的路程,所以很多人都想知道如果用‘1’算他跑步出發的第一個殘影的話,那麼回到起點的時候,他的殘影是怎麼樣的呢?

Input

測試資料有多行,每一行為一個數N(1<=N<=10)(以0結尾,0不做處理),即仙人球在沒有回到起點的時候,跑過留下N個殘影后突然90°右轉。

Output

每組測試資料輸出一個結果,並且每個殘影的計數位長度為3個字元長度。(當然N等於1的話,它的結果也是佔用3個字元位置的)

Sample Input

4

Sample Output

  1  2  3  4
 12        5
 11        6
 10  9  8  7

思路,這個問題實際上就是求N行的順時針遞增的數字表。

主要就是找到規律,1下面那個數字就是4*n-4.可理解為加入每條邊都有N個不同的數,就有4*n個,但是四個角重合了4個,所以最大的數字是4*n-4;

同樣的,n下面那個數字就是n+1

依此類推。就能找出數字規律了。

#include<stdio.h>
void  main()
{
	int n;
	while(~scanf("%d",&n)&&n)
	{
		int i,j;
//列印第一行
	for(i=0;i<n;i++)
		printf("%3d",i+1);
//列印中間的n-2行
	printf("\n");
	for(i=1;i<n-1;i++){
		printf("%3d",4*n-3-i);
		for(j=0;j<n-2;j++)
		printf("   ");
		printf("%3d\n",n+i);
	}
//如果n>1,再列印第n行,如果n<1,就不用了。
	if(n>1){
		int t=3*n-2;
		for(j=0;j<n;j++)
			printf("%3d",t--);
		printf("\n");
	}
	}


}

ok,AC,找規律,有趣。