舟拿着100元去买糖吃,买了糖后要找零时,发现店里只剩下1元、2元和5元的纸币了。找回来一大堆零钱确实很烦人,所以小舟要求店员找给他的纸币的数量必须是最少的。 已知需要找还的钱的数额,同时店里有充足的1、2、5元纸币供找兑。编写一个程序,计算以最少数量的纸币凑出找零的数额时,各种纸币的使用数量。
时间: 2024-03-23 20:36:43 浏览: 123
好的,以下是C语言的实现代码:
```c
#include <stdio.h>
void findMinCoins(int target) {
int coins[3] = {1, 2, 5}; // 纸币面值
int dp[target+1]; // 定义dp数组
dp[0] = 0; // 初始化dp[0]为0
for (int i = 1; i <= target; i++) {
dp[i] = target; // 初始化dp数组为目标数额
for (int j = 0; j < 3; j++) {
if (i >= coins[j] && dp[i-coins[j]]+1 < dp[i])
dp[i] = dp[i-coins[j]] + 1; // 更新dp数组
}
}
// 回溯求解各种纸币的使用数量
int count1 = 0, count2 = 0, count5 = 0;
while (target > 0) {
if (target >= 5 && dp[target-5] == dp[target]-1) {
target -= 5;
count5++;
}
else if (target >= 2 && dp[target-2] == dp[target]-1) {
target -= 2;
count2++;
}
else {
target -= 1;
count1++;
}
}
printf("使用1元纸币的数量:%d\n", count1);
printf("使用2元纸币的数量:%d\n", count2);
printf("使用5元纸币的数量:%d\n", count5);
}
int main() {
findMinCoins(100);
return 0;
}
```
你可以直接调用findMinCoins函数,传入目标数额,即可得到各种纸币的使用数量。
阅读全文