题解
【入门】数字走向III
1 条题解
-
0
解题思路
这道题要求我们输出一个 N×N 的方阵,数字按列优先的顺序填充。
什么叫列优先呢?就是先填满第一列(从上到下),再填第二列,再填第三列……直到填满所有列。
比如 N=5 时:
- 第一列是 1, 2, 3, 4, 5
- 第二列是 6, 7, 8, 9, 10
- ……
- 第五列是 21, 22, 23, 24, 25
所以第 i 行第 j 列的数字 = 1 + i + j × N。
参考代码
#include <iostream> #include <iomanip> using namespace std; int main() { // n 表示方阵的大小,比如 n=5 就是 5行5列 int n; cin >> n; // num 表示当前要填的数字,从 1 开始 int num = 1; // 外层循环控制行数,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 + j * n // 因为先填完一列再填下一列 cout << setw(3) << num + i + j * n; } // 每行结束后换行 cout << endl; } return 0; }复杂度分析
- 时间复杂度:O(N²),因为要填满 N×N 个格子
- 空间复杂度:O(1),只用了一个变量记录数字
- 1