1 条题解
-
0
【例10.2】分钱游戏
解题思路
从最终三人均分状态倒推,依次撤销丙、乙、甲分钱:两名收钱者的钱减半,分钱者取总额减去另外两人。
正确性说明
正向操作把收钱者翻倍,逆向减半可恢复;总额不变唯一确定分钱者,逆序撤销三次得到初始分配。
易错点
有些总额不对应整数钱,用 double 避免除法截断;逆推顺序与正向相反。
复杂度
本题输入规模固定,时间 O(1),额外空间 O(1)。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); double x; cin >> x; double a = x / 3, b = x / 3, c = x / 3; a /= 2; b /= 2; c = x - a - b; a /= 2; c /= 2; b = x - a - c; b /= 2; c /= 2; a = x - b - c; cout << a << " " << b << " " << c << "\n"; return 0; }
- 1