题解
【入门】数字走向IV
1 条题解
-
0
解题思路
这道题和"数字走向III"很像,也是按列优先填充,但是显示的顺序反过来。
原来"数字走向III"是从左到右显示列(第0列、第1列、第2列……), 这道题是从右到左显示列(第 N-1 列、第 N-2 列……第 0 列)。
所以公式变成了:第 i 行第 j 列显示的数字 = 1 + i + (N-1-j) × N
这里的 (N-1-j) 就是把列的顺序颠倒过来。
参考代码
#include <iostream> #include <iomanip> using namespace std; int main() { // n 表示方阵的大小,比如 n=5 就是 5行5列 int n; cin >> n; // 外层循环控制行数,i 从 0 到 n-1 for (int i = 0; i < n; i++) { // 内层循环控制列数,j 从 0 到 n-1 for (int j = 0; j < n; j++) { // 这个方阵是从最右边一列开始显示的 // 第 i 行第 j 列显示的数字 = 1 + i + (n-1-j) * n // (n-1-j) 让列的顺序反过来,右边那一列先显示 cout << setw(3) << 1 + i + (n - 1 - j) * n; } // 每行结束后换行 cout << endl; } return 0; }复杂度分析
- 时间复杂度:O(N²),因为要填满 N×N 个格子
- 空间复杂度:O(1),只用了一个变量记录数字
- 1