top1编程
← 返回题目
题解

【入门】门票的定价

1 条题解

  • 0
    @ 2026-7-31 16:05:51

    解题思路

    票价 30 元时能卖 1200 张。票价每加 1 元,少卖 n 张。要找总收入最高的票价。

    思路:从 30 元开始逐步加价,逐个比较收入。

    1. 初始:票价 30,票数 1200,收入 30×1200
    2. 票价每加 1 元,票数减少 n 张,算一次总收入
    3. 每次收入如果比当前最高还高,就更新最高收入和票价
    4. 直到票数卖完(票数 <= 0)停止
    5. 输出最优票价和最高收入

    为什么要逐个加价试? 票价涨收入不一定涨(涨得多票数就少),所以要每种价格都算一遍收入,取最大。

    举例:n=20

    • 30元:1200张,收入 36000
    • 31元:1180张,收入 36580
    • ……
    • 45元:900张,收入 40500(最高)
    • 46元:880张,收入 40480
    • 所以最优票价 45,收入 40500

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
    
        int p = 30;      // 当前票价
        int c = 1200;    // 当前票数
        int max = 30 * 1200;  // 初始最高收入
        int price = 30;  // 最优票价
    
        while (c > 0) {
            p++;       // 票价加 1
            c -= n;    // 票数减 n
            if (c <= 0) break;
            int s = p * c;  // 收入
            if (s > max) {
                max = s;
                price = p;
            }
        }
    
        cout << price << " " << max << endl;
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N),票价逐步加
    • 空间复杂度:O(1)
    • 1