top1编程
← 返回题目
题解

【入门】阿凡提的难题

1 条题解

  • 0
    @ 2026-7-31 10:27:14

    解题思路

    题目要求用 n 元买大碗(x 元)和小碗(y 元),钱要花光,两种都要买,而且两种碗的数量都得是偶数,输出所有购买方案。

    怎么枚举方案?

    大碗的数量决定后,剩下的钱就用来买小碗。所以:

    1. 大碗数量 a 从 2 开始,每次加 2(只试偶数),最多到 n÷x
    2. 每试一个 a,看剩余的钱 n-a×x 能不能正好买整数个小碗(能被 y 整除)
    3. 能整除的话,还要检查小碗数量是不是偶数且大于 0
    4. 都满足就输出这一组方案

    举个例子:n=100,大碗20元,小碗10元。

    • 大碗 2 只:花 40 元,剩 60 元,60÷10=6 只小碗(偶数 ✅)→ 输出 2 6
    • 大碗 4 只:花 80 元,剩 20 元,20÷10=2 只小碗(偶数 ✅)→ 输出 4 2
    • 大碗 6 只:花 120 元,超过 100 元,结束

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int n, x, y;
        cin >> n >> x >> y;
    
        // 大碗数量从 2 开始,只试偶数
        for (int a = 2; a <= n / x; a += 2) {
            int left = n - a * x;
            // 剩余钱买小碗,要正好花光且小碗也是偶数
            if (left > 0 && left % y == 0) {
                int b = left / y;
                if (b % 2 == 0) {
                    cout << a << ' ' << b << endl;
                }
            }
        }
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N/X),最多试 n÷x 种大碗数量
    • 空间复杂度:O(1)
    • 1