零钱兑换
零钱兑换
https://ac.nowcoder.com/acm/problem/22197
题目描述
n元人民币换成1元、2元、5元的零钱,请计算共有多少种兑换方法?输入描述:
输入一行,包含一个整数n(1 <= n <= 200)输出描述:
输出一行,包含一个整数示例1
输入:100
输出:541解题思路:
可以使用类似贪心算法的思路进行求解。
在不考虑面值为5元的零钱下,求使用1元和2元进行兑换的兑换方法总数,等价于求最多能用多少张2元进行兑换(不够的则用1元补足)并且需要将结果加1(全是1元的情况)。
在考虑面值为5元的零钱下的兑换方法总数,则可转换为求使用1元和2元进行兑换的兑换方法总数。
具体为:假设最多能用m张5元进行兑换(不够则用1元和2元补足),令 i 从1开始,每次递增1,直到 m 为止。在使用 i 张5元时,求出 n - 5i 能用1元和2元进行兑换的兑换方法总数,将结果不断累加,则最终值即为题解。C# 代码
using System; class Program{ static void Main(){ string input; while((input = Console.ReadLine()) != null){ int n = int.Parse(input); int res = n/2 + 1; for(int i = 1; i <= n/5; i++){ int m = n - 5*i; res += m/2 + 1; } Console.WriteLine(res); } } }