• 题目描述
    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);
          }
      }
    }