衬衫的价格是92元,现有若干面值的钱币各10张,试问能否凑出正好92元而不用找零,用一个函数cash实现并重载。输入三种钱币面值a,b,c,输出仅用a与b付费、用a,b,c付费能否凑出而不用找零,能输出1,不能输出0,用一个空格隔开。 用c++写出以上程序
时间: 2024-10-10 19:10:44 浏览: 28
在C++中,你可以创建一个名为`canPay`的函数,用于判断是否可以用给定的钱币面值组合凑出指定价格。这个函数需要被重载多次,分别处理不同情况下的组合支付。下面是一个简单的实现:
```cpp
#include <iostream>
// 函数模板,表示只有一种钱币
bool canPay(int price, int coinValue) {
return (price % coinValue == 0);
}
// 重载函数,处理三种不同面额的钱币
template <typename T, typename U, typename V>
std::string cash(T a, U b, V c, int targetPrice) {
std::string result = "";
// 只有a和b
if (canPay(targetPrice, a) && canPay(targetPrice, b)) {
result += "1 ";
} else {
result += "0 ";
}
// 三种钱币都用
if (canPay(targetPrice, a) && canPay(targetPrice, b) && canPay(targetPrice, c)) {
result += "1 ";
} else {
result += "0 ";
}
return result;
}
int main() {
int shirtPrice = 92;
int coinValues[] = {1, 5, 10}; // 假设是1元,5元,10元的硬币
const int numCoins = sizeof(coinValues) / sizeof(coinValues[0]);
for (int i = 0; i < numCoins; ++i) {
std::cout << "With coins " << coinValues[i] << ", can pay exactly " << shirtPrice << "? ";
std::cout << cash(coinValues[i], coinValues[(i+1)%numCoins], coinValues[(i+2)%numCoins], shirtPrice) << "\n";
}
return 0;
}
```
在这个程序中,`canPay`函数用于检查目标价格是否可以被单一类型的硬币整除,如果是则返回true,否则返回false。`cash`函数接收三个货币面值和目标价格,并根据它们能否构成整数倍的目标价格输出相应的结果。
运行上述代码,它将显示使用每种组合的钱币是否能够凑出92元,同时满足题目中无找零的要求。
阅读全文