1. 程式人生 > >852 蛇形填數(二)【模擬】

852 蛇形填數(二)【模擬】

蛇形填數(二)

時間限制:2000 ms  |  記憶體限制:65535 KB 難度:3
描述
1  2  3  4  5
12 13 14 6
11 15 7
10 8
9
跟蛇形填數一樣,只是填數要求按照三角形填。注意每組資料之間用空行隔開
輸入
第一行有一個N,表示N組測試資料
接下來每組資料包括一個數字X,表示三角形的邊長,0< X <1000
輸出
輸出之後填好之後的圖
樣例輸入
2
5
4
樣例輸出
1  2  3  4  5
12 13 14 6
11 15 7
10 8
9

1  2  3  4
9  10 5
8  6
7

蛇形填數,簡單模擬,二維陣列來儲存,迴圈控制輸入,最後迴圈控制輸出.......

詳細過程如果不太明白,除錯看過程比較好,然後具體就需要自己敲程式碼實現了......

#include<stdio.h>
#include<string.h>
int n,x[1005][1005];
void slove()
{
	int cnt=1,t=0,i,j,k;
	for(i=0;t<n;++i)//打表
	{
		for(j=i;j<n-2*i;++j)//橫
		{
			x[i][j]=cnt++;
		}
		++t;//t控制總共迴圈的次數
		for(j-=2,k=i+1;j>=i;--j,++k)//斜邊
		{
			x[k][j]=cnt++;
		}
		++t;
		for(j=k-2;j>i;--j)//豎邊
		{
			x[j][i]=cnt++;
		}
		++t;
	}
	for(i=0;i<n;++i)//輸出
	{
		for(j=0;j<n-i-1;++j)
		{
			printf("%d ",x[i][j]);
		}
		printf("%d\n",x[i][j]);
	}
	
}
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		slove();
	}
	return 0;
}