题解
【入门】阿凡提的难题
1 条题解
-
0
解题思路
题目要求用 n 元买大碗(x 元)和小碗(y 元),钱要花光,两种都要买,而且两种碗的数量都得是偶数,输出所有购买方案。
怎么枚举方案?
大碗的数量决定后,剩下的钱就用来买小碗。所以:
- 大碗数量 a 从 2 开始,每次加 2(只试偶数),最多到 n÷x
- 每试一个 a,看剩余的钱 n-a×x 能不能正好买整数个小碗(能被 y 整除)
- 能整除的话,还要检查小碗数量是不是偶数且大于 0
- 都满足就输出这一组方案
举个例子: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