题解
书香阁的座位数
1 条题解
-
0
P4365 书香阁的座位数(入门)
解题思路
书香阁一共有 312 个座位,第一排有 15 个,以后每排比前一排多 2 个。题目要我们算出最后一排有几个座位、一共有几排,并且把每一排的情况都列出来。
先找规律:第 1 排 15 个,第 2 排 17 个,第 3 排 19 个……第 r 排就是 15 + (r - 1) × 2 个。这就像爬楼梯,每上一层就多 2 个台阶。
做法:从第 1 排开始一排一排地数,同时用一个累计变量 total 把每排的座位数加起来。每数完一排就输出"排数 座位数 累计总数"三个数,直到累计总数达到 312 就停止。
看样例验证:第 1 排 15 个,累计 15;第 2 排 17 个,累计 32;……第 11 排 35 个,累计 275;第 12 排 37 个,累计 312,正好够,停!所以最后一排有 37 个座位,一共 12 排。
边界情况:判断停止时要用"总数 >= 312"而不是"总数 > 312",因为最后一排刚好让总数等于 312,这一排也要输出。另外题目给的是固定的 312、15、2,不需要读入任何输入,直接从头算到尾就行。
参考代码
// 程序用途:计算书香阁每排的座位数和累计总数,直到总数达到312 #include <iostream> using namespace std; int main() { int total = 0; // total记录累计座位总数 for (int r = 1;; r++) { // r表示第几排,从第1排开始 int s = 15 + (r - 1) * 2; // 第r排座位数:首排15个,每排加2个 total += s; // 把这一排的座位加进总数 cout << r << " " << s << " " << total << endl; if (total >= 312) break; // 总数够312个就停止 } return 0; }复杂度分析
一共只有 12 排,循环次数是固定的十几步,所以时间可以看作 O(1);空间上只用一个累计变量,额外空间复杂度也是 O(1)。
- 1