031.货币面值的组合问题
在英国,货币是由英镑 £,便士 p 构成的。一共有八种钱币在流通:
1p, 2p, 5p, 10p, 20p, 50p, £1 (100p) 和 £2 (200p).
要构造 £2 可以用如下方法:
1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p
允许使用任意数目的钱币,一共有多少种构造 £2 的方法?
答案:73682
代码如下:

static int m=200;static int[]a=new int[]{1,2,5,10,20,50,100};public static int add(){int t=7,res1,res2;for(int n=2;n<=7;n++){if(n==2){for(int i=0;i<6;i++){res1=m/a[i];for(int j=i+1;j<=6;j++)for(int p=1;p<res1;p++){res2=m-p*a[i];if(res2%a[j]==0) t++;}}}else if(n==3){for(int i=0;i<=4;i++)for(int j=i+1;j<=5;j++)for(int p=j+1;p<=6;p++)t+=add3(a[i],a[j],a[p]);}else if(n==4){for(int i=0;i<=3;i++)for(int j=i+1;j<=4;j++)for(int p=j+1;p<=5;p++)for(int q=p+1;q<=6;q++)t+=add4(a[i],a[j],a[p],a[q]);}else if(n==5){for(int i=0;i<=2;i++)for(int j=i+1;j<=3;j++)for(int p=j+1;p<=4;p++)for(int q=p+1;q<=5;q++)for(int e=q+1;e<=6;e++)t+=add5(a[i],a[j],a[p],a[q],a[e]);}else if(n==6){for(int i=0;i<=1;i++)for(int j=i+1;j<=2;j++)for(int p=j+1;p<=3;p++)for(int q=p+1;q<=4;q++)for(int e=q+1;e<=5;e++)for(int f=e+1;f<=6;f++)t+=add6(a[i],a[j],a[p],a[q],a[e],a[f]);}else if(n==7){t+=add7(a[0],a[1],a[2],a[3],a[4],a[5],a[6]);}}return t;}public static int add3(int a,int b,int c){int t1=m/a,t2=m/b,t3=m/c,t=0;for(int i=1;i<t1;i++)for(int j=1;j<t2;j++)for(int p=1;p<t3;p++)if(i*a+j*b+p*c==m) t++;return t;}public static int add4(int a,int b,int c,int d){int t1=m/a,t2=m/b,t3=m/c,t4=m/d,t=0;for(int i=1;i<t1;i++)for(int j=1;j<t2;j++)for(int p=1;p<t3;p++)for(int q=1;q<t4;q++)if(i*a+j*b+p*c+q*d==m) t++;return t;}public static int add5(int a,int b,int c,int d,int e){int t1=m/a,t2=m/b,t3=m/c,t4=m/d,t5=m/e,t=0;for(int i=1;i<t1;i++)for(int j=1;j<t2;j++)for(int p=1;p<t3;p++)for(int q=1;q<t4;q++)for(int f=1;f<t5;f++)if(i*a+j*b+p*c+q*d+f*e==m) t++;return t;}public static int add6(int a,int b,int c,int d,int e,int f){int t1=m/a,t2=m/b,t3=m/c,t4=m/d,t5=m/e,t6=m/f,t=0;for(int i=1;i<t1;i++)for(int j=1;j<t2;j++)for(int p=1;p<t3;p++)for(int q=1;q<t4;q++)for(int h=1;h<t5;h++)for(int g=1;g<t6;g++)if(i*a+j*b+p*c+q*d+h*e+g*f==m) t++;return t;}public static int add7(int a,int b,int c,int d,int e,int f,int l){int t1=m/a,t2=m/b,t3=m/c,t4=m/d,t5=m/e,t6=m/f,t7=m/l,t=0;System.out.println(t1+" "+t2+" "+t3+" "+t4+" "+t5+' '+t6+" "+t7);for(int i=1;i<t1;i++)for(int j=1;j<t2;j++)for(int p=1;p<t3;p++)for(int q=1;q<t4;q++)for(int h=1;h<t5;h++)for(int g=1;g<t6;g++)for(int y=1;y<t7;y++)if(i*a+j*b+p*c+q*d+h*e+g*f+y*l==m) {t++;System.out.println(i+" "+j+" "+p+" "+q+" "+h+' '+g+" "+y);}return t;}public static void main(String[] args) {System.out.println(add()+1);}

程序运行结果:

另一种较简单的思路(动态规划):

private static final int TOTAL = 200;private static int[] COINS = {1, 2, 5, 10, 20, 50, 100, 200};public int change(int amount, int[] coins) {int[] dp = new int[amount + 1];dp[0] = 1;for (int c : coins) {for (int i = c; i <= amount; i++) {dp[i] += dp[i - c];}}return dp[amount];}public String run() {return Integer.toString(change(TOTAL,COINS));}public static void main(String[] args) {System.out.println(new p031().run());}
}

可参考链接:
https://leetcode-cn.com/problems/coin-change-2/solution/hua-tu-li-jie-cong-chang-gui-er-wei-dpda-4gfy/

Java 031. 货币面值的组合问题相关推荐

  1. java字符串字符排列组合_如何在Java中查找字符串的所有排列

    java字符串字符排列组合 In this tutorial, we will learn how to find the permutation of a String in a Java Prog ...

  2. java 实现组合_用Java实现排列、组合算法

    组合个数的计算公式如下: 那么,计算排列或组合的数量,通过上面的公式就很容易就算出来了,其Java的实现如下: /** * 计算阶乘数,即n! = n * (n-1) * ... * 2 * 1 * ...

  3. Java 欧拉工程 第三十一篇【考察英国货币面值的组合问题】

    题目: 在英国,货币是由英镑£,便士p构成的.一共有八种钱币在流通: 1p, 2p, 5p, 10p, 20p, 50p, £1 (100p) 和 £2 (200p). 要构造£2可以用如下方法: 1 ...

  4. Java设计模式(十一):组合设计模式

    1. 应用场景 这种组合模式正是应树形结构而生,所以组合模式的使用场景就是出现树形结构的地方.比如:文件目录显示,多及目录呈现等树形结构数据的操作. 2. 概念 将对象组合成树形结构来表示" ...

  5. java简述对象的组合_Java程序运行和对象创建过程简述

    Java中一个对象创建分为两个步骤: 加载类,创建对象. 加载类是将所写的程序.java文件编译生成的.class文件加载到内存中,保证了对象创建的预置环境.类加载完毕后才可以创建该类的对象. 第一步 ...

  6. java教程菜鸟教程组合模式,组合实体模式

    组合实体模式 组合实体模式(Composite Entity Pattern)用在 EJB 持久化机制中.一个组合实体是一个 EJB 实体 bean,代表了对象的图解.当更新一个组合实体时,内部依赖对 ...

  7. java设计模式组合模式详解_《JAVA设计模式》之组合模式(Composite)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的:html 合成模式属于对象的结构模式,有时又叫作"部分--总体"模式.合成模式将对象 ...

  8. JAVA设计模式初探之组合模式

    先看看组合模式的定义吧:"将对象组合成树形结构以表示'部分-整体'的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性." 就拿剪发办卡的事情来分析一下吧. 首先,一张 ...

  9. java类的聚合 组合定义_Java里组合和聚合的概念及其实现

    Java里组合和聚合的概念及其实现 (一)概念 组合:组合是整体与部分的关系, 并且部分不可以离开整体而单独存在. 聚合:整体与部分的关系, 并且部分可以离开整体而单独存在. 在实际写代码时: 组合方 ...

最新文章

  1. 【leetcode】力扣刷题(2):两数相加(go语言)
  2. EOS技术及生态系统介绍
  3. ibase4j nginx配置
  4. boost::regex模块用于测试特定于语言环境的表达式的帮助程序类
  5. 为Ubuntu安装build-essential软件包
  6. devexpress gridcontrol 内置导航栏,双击后才修改数据
  7. Openstack基础架构和各组件的关系
  8. 如何安装python3.7.2_Python3.7与Python2.7在centos7下兼容并存
  9. 用C#实现文件夹拷贝
  10. [2018.03.14 T1] 矩阵(matrix)
  11. Android程序中如何启动浏览器
  12. 阴阳师服务器在维护,《阴阳师》12月1日服务器维护公告
  13. 基于JAVA南京传媒学院门户网计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  14. 看这个就够了,谷歌翻译Google 退出中国后如何恢复网页翻译?
  15. VMware虚拟机装系统出现Units specified dont exist解决办法
  16. 代码主题darcula_darcula主题模式是()模式。_学小易找答案
  17. [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.26
  18. 关灯后灯常亮、微亮、闪烁——多种原因分析
  19. HyperDAO跨链搭桥:启动万链自由交换时代
  20. 测试IP和端口是否通

热门文章

  1. 你确定会了比特位计算?
  2. hx711芯片c语言程序,压力传感器HX711的C函数
  3. 面试复习题--Okhttp
  4. 手机照片局部放大镜_手机里竟然自带quot;放大镜quot;,很远也感觉近在眼前,真的涨知识了...
  5. 【DockerCE】Docker-CE 23.0.2正式版发布
  6. 9月14日云栖精选夜读:揭秘IPHONE X刷脸认证的技术奥秘
  7. python java驾校报名考试信息管理系统Vue+Elementui
  8. 带您走入Alteryx分析流程自动化(APA)的世界
  9. iOS 录屏大师启动页广告
  10. ESP32解码显示JPG和PNG图片