1 条题解

  • 0
    @ 2089-7-1 2:13:26

    【例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

    信息

    ID
    538
    时间
    1000ms
    内存
    64MiB
    难度
    进阶
    标签
    递交数
    0
    已通过
    0
    上传者