题目
题目描述
在一个国家仅有1分,2分,3分硬币,将钱N分兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。
解答要求
时间限制:1000ms, 内存限制:64MB
输入
输入每行包含一个正整数N(0<N<32768)。输入到文件末尾结束。
输出
输出对应的兑换方法数。
样例
输入样例 1 复制
3
2934
输出样例 1
3
718831
解决方案
- 首先判断最多可以存放多少个3,分别为0个到n/3个
- 放完3之后开始放2,判断放入2的数量范围在 最少放0个2, 最多放n/2个2; 那么存在2的方案数量为:(n - i x 3) / 2,[其中i为3的数量]
- 如果全部放1,只有一种情况
- 求和即可得到总的兑换方案
#include <stdio.h>
int main()
{
int n;
int sum = 0;
scanf("%d", &n);
for(int i = 0;i<=n/3;i++){ // i表示包含了几个3;
sum += (n - i * 3) / 2 + 1; // /2 标识包含了几个2的情况
} // +1 表示当仅由1组成时,只有一种情况
printf("%d\n", sum); // 最后的sum即为总数
return 0;
}
PS:钱币兑换方案介绍到这里!欢迎探讨!