top1编程
← 返回题目
题解

书香阁的座位数

1 条题解

  • 0
    @ 2026-8-5 21:17:14

    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