java应用简单递归
毕业后就怎么学过算法,还在上学的时候学过数据结构,现在基本上都还给老师了,可惜老师学费没有还给我。。。
情景: 类似于给定一个数字,算他由多少个数字组成,比如:36 现在有10、5、1 ,那么最佳帅3个10,1个5,1个1组成(默认优先取最大)。因为我们这边业务上面需要开发票,有的时候不想一个一个算,就让我们写一个。但是他发票的个数不是固定的、无尽的,所以每次就要判断下,如果:36 现在基数还是10、5、1 但是 只让你拿1个10、2个5、若干个1,那么组合应该是:1个10,2个5,16个1,大概就是这个意思。
添加两个list,一个存放基数(从大到小)另外一个存放基数的对应个数。
List list = new ArrayList();
list.add(10);
list.add(100);
list.add(1);
list.add(20);
list.add(50);
list.add(5);
Collections.sort(list, Collections.reverseOrder());
List list2 = new ArrayList();
list2.add(1); //100对应个数(下同)
list2.add(4); //
list2.add(1); //
list2.add(20); //
list2.add(50); //
list2.add(1000); //
下面就是递归了。。没有啥难度。。参数分别是: 输入的总数,集合的初始下标,基数集合,基数个数集合
public void c(int totle, int flag, List list, List list2) {
//System.out.println("当前总额" + totle + ",当前额度" + list.get(flag));
int sum = 0;
for (int i = 0; i < list.size(); i++) {
sum += (int) list.get(i) * (int) list2.get(i);
}
if (sum < totle) {
System.out.println("发票总额不够,请添加发票!!!!");
} else {
if (totle % (int) list.get(flag) == 0) {
int s = totle / (int) list.get(flag);
//System.out.println(s + "");
if (s > (int) list2.get(flag)) {
System.out.println("需要" + list.get(flag) + "元的发票" + s + "张,目前只有" + list2.get(flag) + "张,全部使用!");
totle -= (int) list2.get(flag) * (int) list.get(flag);
System.out.println(totle);
c(totle, ++flag, list, list2);
} else {
System.out.println("需要" + list.get(flag) + "元的发票" + s + "张");
} } else {
int s = totle / (int) list.get(flag);
if (s > (int) list2.get(flag)) {
System.out.println("需要" + list.get(flag) + "元的发票" + s + "张,目前只有" + list2.get(flag) + "张,全部使用!");
totle -= (int) list2.get(flag) * (int) list.get(flag);
System.out.println(totle);
c(totle, ++flag, list, list2);
} else {
totle = totle % (int) list.get(flag);
System.out.println("需要" + list.get(flag) + "元的发票" + s + "张");
System.out.println(totle);
c(totle, ++flag, list, list2);
} }
}
}
假设:
c(365, 0, list, list2);
输出
如果输入超过所有的总额,那么如下:
很简单,记录一下,也是提醒下自己,算法也是蛮重要的。。。没事也要跟着慢慢研究!!!
java应用简单递归的更多相关文章
- Java中的递归运算
Java中的递归运算是一种在自己的方法内部调用自己的方法 递归的设计思想是:把一个复杂的问题,分解为若干个等同的子问题,重复执行,直到之问题能够简单到直接求解,这样复杂的问题就得以解决. 递归运算有两 ...
- Atitit 表达式原理 语法分析 原理与实践 解析java的dsl 递归下降是现阶段主流的语法分析方法
Atitit 表达式原理 语法分析 原理与实践 解析java的dsl 递归下降是现阶段主流的语法分析方法 于是我们可以把上面的语法改写成如下形式:1 合并前缀1 语法分析有自上而下和自下而上两种分析 ...
- Java中递归的优缺点,Java写一个递归遍历目录下面的所有文件包括子文件夹里边的文件。
题目: 遍历出aaa文件夹下的文件 首先分析思路: 1.首先判断这个文件夹是否为文件,通过isFile()函数可以判断是否为文件. 2.然后通过isDirectory判断是否为目录. 3.如果是目录就 ...
- Java实现简单版SVM
Java实现简单版SVM 近期的图像分类工作要用到latent svm,为了更加深入了解svm,自己动手实现一个简单版的. 之所以说是简单版,由于没实用到拉格朗日,对偶,核函数等等.而 ...
- java实现简单的单点登录
java实现简单的单点登录 摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了单点登录的需求和应用领域:从技术本身的角度分析了单点登录技术的内部机制和实现 ...
- Java自定义简单标签
Java自定义简单标签可以方便的在页面输出信息,并且对于权限的控制,和对于Jsp标签和servlet代码的分离有着很好的作用. 下面将以权限的控制为例自定义一个标签: 一.标签类型 <wxt: ...
- 主题:Java WebService 简单实例
链接地址:主题:Java WebService 简单实例 http://www.iteye.com/topic/1135747 前言:朋友们开始以下教程前,请先看第五大点的注意事项,以避免不必要 ...
- java设计模式--简单工厂
java设计模式--简单工厂 简单工厂不是一个标准的设计模式,但是很常用需要掌握. 在java应用开发中,要"面向接口编程". 1.java中接口的概念: 在java中接口是一种特 ...
- JAVA实现简单的四则运算
GitHub 项目地址 https://github.com/745421831/-/tree/master PSP PSP2.1 Personal Software Process Stages 预 ...
随机推荐
- android(十)smali
Dalvik是google专门为Android操作系统设计的一个虚拟机,经过深度的优化.虽然Android上的程序是使用java来开发的,但是Dalvik和标准的java虚拟机JVM还是两回事. Da ...
- jsp内置对象与servlet的关系
Servlet与JSP九大内置对象的关系 JSP对象 怎样获得 out->response.getWriter request ->Service方法中的req参数 response ...
- 使用spring boot ,和前端thymeleaf模板进行开发路径问题
加入引用:<html xmlns:th="http://www.thymeleaf.org">1:引用templates模板下面的文件时,不要用/绝对路径. 2:引用s ...
- Python第一弹--------初步了解Python
Python是一种跨平台的语言,这意味着它能够运行在所有主要的操作系统中. 语法规范几乎同C语言. 字符串: 当像Python输入一个字符串时,首先要输入一个引号.单引号.双引号.三引号三者等价.通常 ...
- R语言apply()函数用法
在R语言的帮助文档里,apply函数的功能是: Retruns a vector or array or list of values obtained by applying a function ...
- 更好的利用配置文件和importlib
需求:做不同的操作时只需修改配置文件即可完成 # message/email.py from .base import Base # 子类必须实现send方法,否则抛出异常 class Email(B ...
- python中的TCP及UDP
python中是通过套接字即socket来实现UDP及TCP通信的.有两种套接字面向连接的及无连接的,也就是TCP套接字及UDP套接字. TCP通信模型 创建TCP服务器 伪代码: ss = sock ...
- Python: 复数的数学运算
写的最新的网络认证方案代码遇到了一个难题,唯一的解决办法就是使用复数空间,需要使用复数来执行一些计算操作. 复数可以用使用函数complex(real, imag) 或者是带有后缀j 的浮点数来指定. ...
- Python笔记 #11# 统计图定制化
将数据可视化有许多选择: 图的类型 定制化方式 选择什么样的表现方式通常取决于: 数据 你想表达什么 1.Labels # Basic scatter plot, log scale plt.scat ...
- 20145122 《Java程序设计》第二周学习总结
20145122 <Java程序设计>第2周学习总结 教材学习内容总结 在大一的时候我们学习了C语言,所以对第三章的知识不是很陌生,但有些新知识需要记忆. java常用的数据类型: byt ...