美文网首页
拼凑面额:

拼凑面额:

作者: Katakuly | 来源:发表于2018-10-01 21:20 被阅读0次

    题目描述:给你六种面额1、5、10、20、50、100元的纸币,假设每种币值的数量都足够多,编写程序求组成n元(n为0-10000的非负整数)的不同组合的个数。

    输入描述:输入为一个数字n,即需要拼凑的面额

    输出描述:也是一个数字,为组成n的组合个数。

    import java.util.Scanner;
    public class Main {
        public static void main(String[] args){
            Scanner in = new Scanner(System.in);
            int num = in.nextInt();
     
            int[] m = {1, 5, 10, 20, 50, 100}; // 保存基本面额的数组
            long[] data = new long[num+1]; // 保存计算数据的数组
            for(int i = 0; i <= num; i++) // 边界条件A(n,1) = 1 (n>=0)
                data[i] = 1;
            for(int i = 1; i < 6; i++) // 基本面额从5开始,因为1元情况在数组初始化时已经写入了
                for(int n = 1; n <= num; n++) // n从1开始,保证了边界条件A(0,m)=1 (m=1,5,10,20,50,100)
                    if(n >= m[i])
                        data[n] += data[n - m[i]]; // 状态转移方程
            System.out.println(data[num]);
            in.close();
        }
    }
    

    相关文章

      网友评论

          本文标题:拼凑面额:

          本文链接:https://www.haomeiwen.com/subject/vmynoftx.html