题解
站方阵
1 条题解
-
0
解题思路
这道题是二维数组入门里最经典的“按顺序填数”。
1. 题意
学生从 1 号开始往后编号,体育老师让他们按“先站满第 1 行,再站第 2 行……”的顺序站成 n×n 的方阵。我们要模拟这个过程并输出。
2. 怎么模拟?
用一个变量 num,一开始等于 1,代表现在站的是 1 号学生。然后:
- 第 1 行第 1 列站 1 号,num 变成 2;
- 第 1 行第 2 列站 2 号,num 变成 3;
- ……依次下去,每站一个学生 num 就加 1。
等 n 行都站完,num 刚好等于 n×n+1。
3. 输出格式
每行的数字之间用空格隔开,每行结束后换行。注意最后一个数字后面不要多输出空格(用 j<n 判断)。
4. 对照样例
n=4 时输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16和样例完全一致。
参考代码
#include <iostream> using namespace std; int main(){ // P4529 站方阵:学生从1开始按行依次站成 n*n 方阵 int n; cin >> n; int num = 1; // 从1号学生开始 for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cout << num++; // 输出当前学生编号后自动加1 if(j<n) cout << " "; // 两个数字之间用空格隔开 } cout << endl; // 一行站完换行 } return 0; }复杂度分析
方阵有 n 行 n 列,一共 n² 个学生,每个学生输出一次,所以时间复杂度是 O(n²)。题目保证 3<n<10,最多 9×9=81 个学生,非常快。
程序没有开数组,只用了 n 和 num 两个变量,空间复杂度是 O(1)。
- 1