蛇形填数
时间限制:
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
n = 3 时
规律:
A[0][2] = 1;
A[1][2] = 2;
A[2][3] = 3’
A[2][1] = 4;
A[2][0] = 5;
A[1][0] = 6;
A[0][0] = 7;
A[0][1] = 8;
A[1][1] = 9
同理 n = 4;
#include <iostream> #include <cstring> using namespace std; int main() { int n, a[100][100], ans = 1; cin >> n; memset(a, 0, sizeof(a)); int i = 0, j = n - 1, max = n*n; a[i][j] = 1; while(ans < max) { while(i+1 < n&& a[i+1][j] == 0) a[i++][j] = ans++; while(j-1 >= 0 && a[i][j-1] == 0) a[i][j--] = ans++; while(i-1 >= 0 && a[i-1][j] == 0) a[i--][j] = ans++; while(j+1 < n && a[i][j+1] == 0) a[i][j++] = ans++; } for(i = 0; i < n; i++) { for(j = 0; j < n; j++) { if(a[i][j] == 0) cout << n*n << " "; else cout << a[i][j] <<" "; } cout << endl; } return 0; }