题解
【入门】门票的定价
1 条题解
-
0
解题思路
票价 30 元时能卖 1200 张。票价每加 1 元,少卖 n 张。要找总收入最高的票价。
思路:从 30 元开始逐步加价,逐个比较收入。
- 初始:票价 30,票数 1200,收入 30×1200
- 票价每加 1 元,票数减少 n 张,算一次总收入
- 每次收入如果比当前最高还高,就更新最高收入和票价
- 直到票数卖完(票数 <= 0)停止
- 输出最优票价和最高收入
为什么要逐个加价试? 票价涨收入不一定涨(涨得多票数就少),所以要每种价格都算一遍收入,取最大。
举例: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