1. 程式人生 > >codeup27968 方陣填數(NOIP1995普及組第2題)

codeup27968 方陣填數(NOIP1995普及組第2題)

時空限制    1000ms/128MB

題目描述

在一個N*N的方陣中,填入1,2,……N*N個數,並要求構成如下的格式:
例如: N=5
13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5
例如:N=6
16 17 18 19 20 1
15 30 31 32 21 2
14 29 36 33 22 3
13 28 35 34 23 4
12 27 26 25 24 5
11 10 9 8 7 6

輸入

每個測試檔案只包含一組測試資料,每組輸入一個N(1<=N<=100)。

輸出

輸出構成的方陣。N行N列,數字之間用一個空格隔開,每行最後沒有空格。

樣例輸入

5

樣例輸出

13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5

程式碼

#include<iostream>
using namespace std;
int a[105][105]={0};

int main(){
	int n,x,y,k;
	cin>>n;
	k=a[x=1][y=n]=1;
	while (k<n*n){
		while (x+1<=n && !a[x+1][y]) a[++x][y]=++k;
		while (y-1>=1 && !a[x][y-1]) a[x][--y]=++k;
		while (x-1>=1 && !a[x-1][y]) a[--x][y]=++k;
		while (y+1<=n && !a[x][y+1]) a[x][++y]=++k;
	}
	for (int i=1; i<=n; i++){
		for (int j=1; j<n; j++) cout<<a[i][j]<<" ";
		cout<<a[i][n]<<endl;
	}
	return 0;
}