问题:
有1元,5元,10元,50元,100元的五种货币,任给定一个数额,求所有可能的组合数.
思路:
是用排列组合中思想做出的一个计算所有排列数量的算法
思想是,数额321,以100元单位为例,总组合数量是下面两种情况之和:
1.组合里包含100元,即至少有100元1张,那么321-100=221元由这5种组合的数量
2.组合里不包含100原,那就是321由前四种组合的数量
java实现:
public class Test2 {
//1,5,10,50,100
public static void main(String[] args){
System.out.println(parseAllSeperationType(121, 5));
}
private static int parseAllSeperationType(int money, int typeNumber){
if(typeNumber <= 0 || money < 0){
return 0;
}
if(money == 0){
return 1;
}
return parseAllSeperationType(money, typeNumber-1) + parseAllSeperationType(money - getMoneyByType(typeNumber), typeNumber);
}
private static int getMoneyByType(int typeNumber) {
int money = 0;
switch(typeNumber){
case 5 : money = 100;
break;
case 4 : money = 50;
break;
case 3 : money = 10;
break;
case 2 : money = 5;
break;
case 1 : money = 1;
break;
default: money =0;
}
return money;
}
}
如果再要求打印出所有的组合情况的话,稍作改动,java代码实现:
public class Test1 {
private static int totals =0;
public static void main(String[] args) {
components(121, 100, "");
System.out.println("total kinds number: " + totals);
}
//1, 5, 10, 50, 100
private static void components(int money, int type_money, String printResult){
if(type_money == 0 || money <= 0){
//System.out.println(printResult);
return;
}
int max_num = money/type_money;
if(max_num > 0){
for(int i=0; i <= max_num; i++){
String printResultTem = printResult;
if(i != 0){
printResultTem += " " + type_money + ":" + i;
}
if(i*type_money == money){
totals++;
System.out.println(printResultTem);
return;
}
components(money- i*type_money, getNextMoneyType(type_money), printResultTem );
}
}else{
components(money, getNextMoneyType(type_money), printResult );
}
}
private static int getNextMoneyType(int typeNumber) {
int money = 0;
switch(typeNumber){
case 100 : money = 50;
break;
case 50 : money = 10;
break;
case 10 : money = 5;
break;
case 5 : money = 1;
break;
case 1 : money = 0;
break;
default: money =0;
}
return money;
}
}
分享到:
相关推荐
贪心算法介绍以及多种语言实现举例:...这种方法已被证明在硬币面值组合为特定集的情况下是最优的,如美国货币系统。贪心算法的实现在不同编程语言中逻辑一致,但语法结构各异,体现了算法的通用性和跨语言的适应性。
可针对指定EA,指定产品符号,指定注释,指定订单魔术编号进行特定局部风控,亦可组合实现复杂的风控功能。 参数设置 界面语言:可切换中英文显示 加载面板:可以选择加载或者不加载面板 范围风控开关:实现特定...
【开发语言及实现平台或实验环境】 在Windows 2000(SP2) 或Windows XP 操作系统上,使用C++语言,使用VC6.0开发工具。 【实验目的】 (1) 认识单元测试原理 (2) 掌握单元测试过程 【实验要求】 要求学生能够理解...
一个个人项目,旨在创建一个简单而有效的应用程序这使用户可以创建其金融资产的投资组合,包括股票,加密货币和商品。仪表板将向用户显示其当前持股的信息概述,以图表,表格和指标的形式。 所有市场数据均由提供。 ...
【收藏】:快速浏览收藏的多种货币组合,实时掌握最新汇率。 【大全】:提供全球一百三十余种货币之间汇率查询,支持智能匹配搜索功能,可将支持的货币加入收藏,同时支持金、银、钯、铂贵金属与货币之间汇率查询。 ...
货币套利交易是一种投资策略,涉及出售低利率货币以购买更高利率的货币,从而从利差... 因此,证明特定货币组合之间的尾部依赖性为套利交易超额回报提供了其他理由,也使我们能够检测此类套利投资组合的构建和平仓期。
理财产品推荐:系统根据用户的风险偏好、投资目标等信息,推荐适合的理财产品,包括货币基金、股票基金、定期存款等,帮助用户实现资产增值和风险控制。 财务报表生成:系统根据用户的资产情况和投资收益,生成财务...
可针对指定EA,指定产品符号,指定注释,指定订单魔术编号进行特定局部风控,亦可组合实现复杂的风控功能。 参数设置 界面语言:可切换中英文显示 加载面板:可以选择加载或者不加载面板 范围风控开关:实现特定...
我是北京交大教师程轶平,这是我为我开设的课程“ Windows程序设计”编写的扫雷代码,是基于ReactOS的WinEMine改写的,采用Win32 API。界面完全模仿微软自带的扫雷,完整地实现了整个功能。而且代码很简洁。
主要问题是弄清楚如何使用模态,弄清楚如何实现股票购买功能,以及使用 chart.js 实现图表。 我们遇到的另一个问题是当我们处理 API 限制时,即可以进行的调用限制。 我们的队伍 GitHub。 GitHub。 GitHub。 GitHub...
在印度政府取消货币化的背景下,本文提出了一种在有可能撤出货币时最优货币持有的模型。 我们的结果表明,如果感知到较高面额货币的提取... 因此,无需实际实施货币化即可实现货币化的目标之一,即较少持有较高的货币。
假设商店货品价格都不大于100元(且为整数),若顾客付款在100元内,现有一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币币值张数最少)
针对金融组合管理问题的深度强化学习框架该存储库介绍了在哥伦比亚大学的背景下实现的项目中我们的工作。 这个深度政策网络强化学习项目是我们对原始论文实施和进一步研究 。 目标:问题是自动化投资组合管理的一个...
此EA最大的亮点在原有的组合性货币兑套利中,利用合理交叉价格的暂时性偏离来实现套利。 他融入了单币的双向对冲,分开结仓,这一点很神奇,选择带有关联性的货币对,根据偏离值对冲进场,混合多种止盈止损模式, ...
添加股票代码和您希望出售或购买的价值,并跟踪您的愿望是否实现并提供详细信息。 股票行将在买入时变为绿色,何时卖出变为红色。 投资组合 - 投资组合概要 - 行业概要 您需要的有关投资组合中所有股票的所有信息。 ...
:分析数据集,其中包含有关不同产品类别的各个客户的年度支出金额(以货币单位报告)的数据,以发现内部结构,模式和知识。 :创建优化的Q-Learning驾驶代理,该代理将在Smartcab的整个环境中实现目标。 :设计...
马丁网格对冲EA不是不行,关键是我们什么时间如何去用,用在什么货币什么时间段等,今天给大家介绍一款单混合对冲-EA,不同的参数组合可以实现多种策略需求。
附带一键平仓系统,可以灵活的实现魔术编号组,货币组,订单注释组等组合平仓功能。 屏幕显示开启了哪些风控功能,让使用更便利。 参数设置 界面语言:可切换中英文显示 加载面板:可以选择加载或者不加载面板 范围...