【输入样例】
4
【输出样例】
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
思路:
本题变形比较多通常都是通过模拟求解,模拟出路线即可,一定要设置 l 和 r 因为他们是不断变化的,x表示打印数字的个数作为循环条件,模拟过程中 i 是那个变化的值,比如往下走行变化就把i放到二维数组a[i][r]中。
1、往下走1234
2、往左走567
3、往上走89 10
4、往右走11 12
......
#include<iostream>
using namespace std;
const int N = 1e2 + 10;
int a[N][N];
int main() {
int n; cin >> n;
int l = 1, r = n, x = 0;
while (x < n*n) {
//1.向下走,模拟行的变化
for (int i = l; i <= r; i++) a[i][r] = ++x;
//2.向左走,模拟列的变化
for (int i = r - 1; i >= l; i--) a[r][i] = ++x;
//3.向上走,模拟行的变化
for (int i = r - 1; i >= l; i--) a[i][l] = ++x;
//4.向右走,模拟列的变化
for (int i = l + 1; i <= r - 1; i++) a[l][i] = ++x;
l++, r--;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cout << a[i][j] << " ";
}cout << endl;
}
return 0;
}