2310 - 方阵填数
时间限制 : 1 秒
内存限制 : 125 MB
在一个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
<span style="font-family:SimSun;">16 17 18 19 20 1</span>
<span style="font-family:SimSun;">15 30 31 32 21 2</span>
<span style="font-family:SimSun;">14 29 36 33 22 3</span>
<span style="font-family:SimSun;">13 28 35 34 23 4</span>
<span style="font-family:SimSun;">12 27 26 25 24 5</span>
<span style="font-family:SimSun;">11 10 9 8 7 6</span>
题目输入
每个测试文件只包含一组测试数据,每组输入一个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
C语言解答
#include <stdio.h> int main (void) { int i, n, k, ix, iy; scanf("%d", &n); int A[n][n]; k = 0; for(i = 0; i <= n / 2; i++) { for(ix = i, iy = n - i - 1; ix < n - i - 1; ix++) { k++; A[ix][iy] = k; } for(ix = n - i - 1, iy = n - i - 1; iy > i; iy--) { k++; A[ix][iy] = k; } for(ix = n - i - 1, iy = i; ix > i; ix--) { k++; A[ix][iy] = k; } for(ix = i, iy = i; iy < n - i - 1; iy++) { k++; A[ix][iy] = k; } } if(n % 2 == 1) A[n / 2][n / 2] = ++k; for(ix = 0; ix < n; ix++) { for(iy = 0; iy < n; iy++) { if(iy > 0) printf(" "); if(A[ix][iy] < 10&&(iy == 0||A[ix][iy - 1] < 10)) printf(" "); printf("%d", A[ix][iy]); } printf("\n"); } return 0; }
C++解答
#include <iostream> #include <string> #include <cstdio> using namespace std; int n; int map[200][200]={0}; void fill_map(int t,int l,int s) { for(int i=l+1;i<=s;i++) map[i][s]=t++; for(int i=s-1;i>=l+1;i--) map[s][i]=t++; for(int i=s-1;i>=l+1;i--) map[i][l+1]=t++; for(int i=l+2;i<=s-1;i++) map[l+1][i]=t++; if(s>=0) fill_map(t,l+1,s-1); } void print_map1() { for(int i=1;i<=n;i++) { for(int j=1;j<n;j++) printf("%2d ",map[i][j]); printf("%2d\n",map[i][n]); } } void print_map2() { for(int i=1;i<=n;i++) { for(int j=1;j<n;j++) printf("%d ",map[i][j]); printf("%d\n",map[i][n]); } } int main() { cin>>n; fill_map(1,0,n); if(n!=10) print_map1(); else print_map2(); return 0; }
Python解答
# coding=utf-8 #!/usr/bin/python3 def solve(N): matrix = [[0 for i in range(0, N)] for i in range(0, N)] num = 1 N_2 = int((N+1)/2) for i in range(0, N_2): x, y = i, N - i - 1 matrix[x][y] = num while x < y: matrix[x][y] = num num += 1 x += 1 while y > i: matrix[x][y] = num num += 1 y -= 1 while x > i: matrix[x][y] = num num += 1 x -= 1 while y < N - i -1: matrix[x][y] = num num += 1 y += 1 return matrix def print_ans(matrix): n = len(matrix) for i in range(0, n): for j in range(0, n): if j == 0 and n <= 3: print('{:2d}'.format(matrix[i][j]), sep='', end='') elif j == 0: print('{:d}'.format(matrix[i][j]), sep='', end='') elif n <= 3: print(' {:2d}'.format(matrix[i][j]), sep='', end='') else: print(' {:d}'.format(matrix[i][j]), sep='', end='') print('') def main(): s = input() N = int(s) print_ans(solve(N)) if __name__ == '__main__': main()