牛可乐在牛牛商场买了一个帽子,要支付c元金币,牛牛商场一律不找零钱,牛可乐手里有不限数量的面值a元的金币和面值b元的金币,请问牛可乐可以用金币刚好凑出总价c元吗?用C++代码写出解法
时间: 2024-10-23 20:14:29 浏览: 18
在牛牛商场购买帽子的情景中,如果牛可乐手头有的金币都是a元或b元面额,能否凑出正好c元取决于c是否能被a和b整除,以及剩余的余数。如果c可以被a和b整除,或者c分别减去a和b的倍数之后剩下的金额可以由另一枚金币补足,那么就可以凑成。
这里我们可以使用C++编写一个简单的算法来解决这个问题:
```cpp
#include <iostream>
using namespace std;
bool canPay(int c, int a, int b) {
// 如果c能被a或b整除,则直接返回true
if (c % a == 0 || c % b == 0)
return true;
// 检查是否存在a的倍数加上b的倍数等于c的情况
for (int i = 0; a * i <= c - b; ++i) {
if ((c - b) % a == 0)
return true;
}
return false;
}
int main() {
int c, a, b;
cout << "请输入帽子的价格(c), 面值a和面值b: ";
cin >> c >> a >> b;
if (canPay(c, a, b))
cout << "牛可乐可以用金币刚好凑出总价." << endl;
else
cout << "牛可乐无法用金币刚好凑出总价." << endl;
return 0;
}
```
在这个代码里,`canPay`函数检查了所有可能的组合,看是否存在合适的金币组合满足条件。然后在主函数中获取用户输入并调用该函数判断。
阅读全文