给定数量不限的硬币,币值为25分,10分,5分和1分,编写代码计算n分有几种表示法

解法:

这是个递归问题,我们要找出如何利用较早的答案(也就是子问题的答案)计算出makeChange(n).

public int makeChange(int n,int denom)

{

int next_denom=0;

switch(denom)

{

case 25:

next_denom=10;

break;

case 10:

next_denom=5;

break;

case 5:

next_denom=1;

break;

case 1:

return 1;

}

int ways=0;

for(int i=0;i*denom<=n;i++)

ways+=makeChange(n-i*denom,next_denom);

return ways;

}

System.out.writeln(makeChange(100,25));

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-09 21:48:31

给定数量不限的硬币,币值为25分,10分,5分和1分,编写代码计算n分有几种表示法的相关文章

9.9递归和动态规划(八)——给定数量不限的硬币,币值为25分,10分,5分,1分,计算n分有几种表示法

/** * 功能:给定数量不限的硬币,币值为25分,10分,5分,1分,计算n分有几种表示法. */ public static int makeChange(int n){ return makeChange(n,25); } /** * 递归的终止条件:完全简化为1分. * @param n * @param denom * @return */ public static int makeChange(int n,int denom){ int next_denom=0; switch(d

InterviewQuestion_C#_Probl_计算1分2分5分硬币各有多少枚

题目:现在有1分.2分.5分硬币共100个,总金额为2.46元,请用程序计算出1分.2分.5分各有多少枚,有多少种算法? 这是最近面试遇到的一个题目,刚开始没有思路,一看这是一个三元一次方程组,假设个数分别为a.b.c的话,就会有三个未知数和两个方程组,怎么解?数学真是白学了! 于是在网上搜到了这个题目,不过题目略有不同: 文件:Program1.cs //问题:1分2分5分硬币,一共2.46元,求各种硬币的个数 //回答:你没说明是不是求需要的最少的硬币的个数,因为这样有上千种组成,所以我就给

用1分,5分,10分,25分,50分硬币凑成一元,总共有几种组合办法?(SQL 谜题)

早在ITPUB中看过有个SQL高手,喜欢出谜题,以下是一个谜题.我试用SQL SERVER解决此问题. 用1分,5分,10分,25分,50分硬币凑成一元,总共有几种组合办法? SELECT'1*'+rtrim(a.number) +'+5*'+rtrim(b.number) +'+10*'+rtrim(c.number) +'+25*'+rtrim(d.number) +'+50*'+rtrim(e.number)AS result FROM(select number from master.

给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。

问题描述:给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果.输入值小于1000.如,输入为10,程序应该输出结果为2.(共有两对质数的和为10,分别为(5,5),(3,7)) 附算法代码: public class PrimeNumber { //判断是否是质数 protected boolean isPrimeNumber(int num){ if(num == 2) return true;//2特殊处理 if(num < 2 || num % 2 == 0) r

列举出给定数量的字符的所有组成情况-java实现

老早以前刚学程序的时候碰到了这么个问题,当时没想出来,今天突然想起来了这么个问题于是写了下,也算留个纪念吧 1 public static String itr; 2 3 public static void main(String[] args) { 4 String s = "abcd"; 5 printGroup(s); 6 } 7 8 public static void printGroup(String in){ 9 itr = in; 10 for (int i = 0;

每日编程-20170327

有数量不限的硬币,币值为25分.10分.5分和1分,请编写代码计算n分有几种表示法. 给定一个int n,请返回n分有几种表示法.保证n小于等于100000,为了防止溢出,请将答案Mod 1000000007. 测试样例:6 返回:2 解答: 硬币问题直接使用动态规划的算法,我是在这里学习的该方法,有详细的解答. 下面是我按照连接的方法写的动态规划算法. 1 #include <iostream> 2 #include <vector> 3 4 using namespace st

careercup-递归和动态规划 9.8

9.8 给定数量不限的硬币,币值为25分.10分.5分和1分,编写代码就是n分有几种表示法. 解法: 使用回溯法进行解决,实际上就是一个类似枚举的过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径. C++实现代码: #include<vector> #include<iostream> using namespace std; void helper(vector<int> &denom,int target,ve

CC150 需整理汇总

汉诺塔问题:P141 用两个stack设计一个队列 p142 结合上题,队列实现max操作,要求尽量提高效率.(编程之美) 找出二叉树中指定节点的下一个节点(中序后继),假定每个节点有父指针.p154 二叉树某两个节点的公共祖先.p155 判断T2是否是T1的子树.p159 打印二叉树节点数值总和等于某个给定节点的所有路径. p161 打印0-1之间double数字的二进制表示 p164 编写一个函数,确定需要改变几个位,才能将整数A转成整数B.p171 9.3 寻找magic index.p2

【51nod 1251】 Fox序列的数量(以及带限制插板法讲解)

为什么网上没有篇详细的题解[雾 可能各位聚聚觉得这道题太简单了吧 /kk 题意 首先题目是求满足条件的序列个数,条件为:出现次数最多的数仅有一个 分析 感谢 刚睡醒的 JZ姐姐在咱写题解忽然陷入自闭的时候为咱知道迷津 QwQ 那么套路来说第一想到的其实就是容斥辣 然后懒得想去网上黈力[雾 在然后,发现网上要么没推导公式(虽说是直接列不用化简的)要么就是推导公式是错的... 于是坐下来冷静分析:首先,我们考虑最高的出现次数为 x 的情况下,有多少个序列是满足条件的 容斥一发发现式子长这个样子(用到