add
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
#include <stdio.h>
|
||||
#include <limits.h> // 用于 INT_MAX
|
||||
|
||||
#define MAX_AMOUNT 100 // 定义最大金额
|
||||
|
||||
// 函数原型
|
||||
int coinChange(int coins[], int numCoins, int amount);
|
||||
|
||||
int main() {
|
||||
int coins[] = {1, 2, 5}; // 硬币面额数组
|
||||
int amount = 29; // 目标金额
|
||||
int numCoins = sizeof(coins) / sizeof(coins[0]); // 硬币数量
|
||||
|
||||
int result = coinChange(coins, numCoins, amount);
|
||||
if (result != -1) {
|
||||
printf("组成金额 %d 所需的最少硬币数为: %d\n", amount, result);
|
||||
} else {
|
||||
printf("无法组成金额 %d。\n", amount);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int coinChange(int coins[], int numCoins, int amount) {
|
||||
// 创建一个固定大小的数组来存储最少硬币数
|
||||
int dp[MAX_AMOUNT + 1];
|
||||
|
||||
// 初始化 dp 数组
|
||||
for (int i = 0; i <= MAX_AMOUNT; i++) {
|
||||
dp[i] = INT_MAX; // 将每个值初始化为无穷大
|
||||
}
|
||||
dp[0] = 0; // 组成金额 0 所需的硬币数为 0
|
||||
|
||||
// 填充 dp 数组
|
||||
for (int i = 1; i <= MAX_AMOUNT; i++) {
|
||||
for (int j = 0; j < numCoins; j++) {
|
||||
if (coins[j] <= i) {
|
||||
// 更新 dp[i] 的值
|
||||
if (dp[i - coins[j]] != INT_MAX) {
|
||||
dp[i] = (dp[i] < dp[i - coins[j]] + 1) ? dp[i] : (dp[i - coins[j]] + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 返回结果
|
||||
return (amount <= MAX_AMOUNT && dp[amount] != INT_MAX) ? dp[amount] : -1;
|
||||
}
|
||||
Reference in New Issue
Block a user