PTA上换硬币问题

该程序使用C语言实现,通过三层嵌套循环寻找所有可能的5元、2元和1元硬币组合,当总和等于输入值时,输出组合并计数。程序主要关注整数除法和条件判断,展示了基本的算法应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2577e1d0108b485699e8659023818d26.jpg

5d9610e252f1472f8d462a9574d53ae0.jpg 

 

#include <stdio.h>
int main()
{    
    int x,a,b,c,total,count=0;
    scanf("%d",&x);
    for(a=x/5;a>0;a--)
        for(b=(x-5*a)/2;b>0;b--)
            for(c=x-5*a-2*b;c>0;c--)
                if(5*a+2*b+c==x){
                    total=a+b+c;
                    printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",a,b,c,total);
                    count++;
                }
    printf("count = %d",count);
    return 0;

 

}
### 硬币算法 C++ 实现 硬币问题是经典的动态规划问题之一,目标是找到能够组成特定总金额所需的最少硬币数量。以下是基于动态规划方法的 C++ 实现: #### 动态规划核心思想 创建一个大小为 `amount + 1` 的数组 `dp`,其中 `dp[i]` 表示凑成金额 `i` 所需的最少硬币数。初始时将所有值设为正无穷大(表示不可达),并将 `dp[0]` 设为 0(因为凑成金额 0 不需要任何硬币)。通过迭代更新每个子问题的结果来逐步构建最终解。 #### 源代码实现 以下是一个完整的 C++ 实现代码[^3]: ```cpp #include <iostream> #include <vector> #include <climits> using namespace std; int coinChange(vector<int>& coins, int amount) { vector<int> dp(amount + 1, INT_MAX); dp[0] = 0; for (int i = 1; i <= amount; ++i) { for (const auto& coin : coins) { if (i >= coin && dp[i - coin] != INT_MAX) { dp[i] = min(dp[i], dp[i - coin] + 1); } } } return dp[amount] == INT_MAX ? -1 : dp[amount]; } int main() { vector<int> coins = {1, 2, 5}; // 可选硬币面额 int amount; cout << "请输入要兑的总金额: "; cin >> amount; int result = coinChange(coins, amount); if (result != -1) { cout << "最少需要的硬币数量为: " << result << endl; } else { cout << "无法用给定硬币凑成该金额" << endl; } return 0; } ``` #### 运行逻辑说明 上述程序实现了 LeetCode 零钱兑问题的核心功能[^4]。它接受一组硬币面额以及目标金额作为输入,并输出所需最少硬币数目或者 `-1` 来表明不可能完成兑。具体过程如下: - 初始化动态规划表 `dp` 并设定边界条件。 - 对于每一个金额值 `i` 和每一种可用硬币 `coin`,尝试更新当前状态下的最优解。 - 如果最后的状态仍保持未被修改,则返回 `-1`;否则返回对应的最小硬币计数值。 此解决方案的时间复杂度主要由两层嵌套循环决定,即 O(n * m),其中 n 是目标金额而 m 则代表硬币种类总数[^5]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值