
正文
java分零钱代码 java钱包
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
用java 完成整钱兑零钱程序,要求:输入一个double值,代表总零钱数,输出清单,列出等价的货
public static void splitMoney(Double unSplitMoney) {
if (unSplitMoney = 0) {
System.out.println("请输入正确的金额.");
}
int unSplitMoneyCents = (int) (unSplitMoney * 100);
int[] splitArray = {100 * 100, 50 * 100, 20 * 100, 10 * 100, 5 * 100, 2 * 100, 1 * 100, 5 * 10, 2 * 10, 1 * 10, 5, 2, 1};
String[] splitArrayName = {"100元", "50元", "20元", "10元", "5元", "2元", "1元", "5角", "2角", "1角", "5分", "2分", "1分"};
System.out.println("您的输入金额为:" + unSplitMoney + "元,可以被兑换为:");
for (int i = 0; i splitArray.length unSplitMoneyCents 0; i++) {
if (unSplitMoneyCents = splitArray[i]) {
System.out.print(unSplitMoneyCents / splitArray[i] + "个" + splitArrayName[i]+",");
unSplitMoneyCents = unSplitMoneyCents % splitArray[i];
}
}
}
测试用例:
public static void main(String[] args) {
splitMoney(128.32);
}
输出结果:
您的输入金额为:128.32元,可以被兑换为:
1个100元,1个20元,1个5元,1个2元,1个1元,1个2角,1个1角,1个2分,
Process finished with exit code 0
相关问答
Q1: java 循环例题:100元找零钱,零钱1,2,5元,问共有多少种分法。
public
static
void
splitMoney(int
n){
int
count
=
0;//此变量为计数器
for
(int
b
=
0;
b
=
n;
b=b+5)
{
for
(int
c
=
0;
c
=
n;
c=c+2)
{
for
(int
d
=
0;
d
=
n;
d=d+1)
{
if(b=0c=0d=0(n-(b+c+d))=0){
System.out.print(n
+
"元="
+
(b/5)
+
"个5元
+"
+
(c/2)
+
"个2元
+"
+
(d/1)
+
"个1元
+"
+
(n
-
(b+c+d))+"个1元\n");
count++;
}
}
}
}
System.out.println("\n"
+
"总共有"
+
count
+"种方法");
希望对java分零钱代码你有用
Q2: JAVA 递归找零钱
看了楼上的写法后,不甚满意,于是自己写了一种。
这个题目很有意思,相当有意思。
加上了比较详细的注释。
你试一试。
这种方法你能很明显的看出递归的特征。
可以随意传要找钱的总数,以及硬币面额可以增加或者减少。但是
硬币的面额要由小到大排列,就ok
注释加的有点多。。看起来有点累赘。不过能容易看。
package file;
import java.util.ArrayList;
import java.util.List;
/**
* 递归得到找钱方案个数
* 思路为:
* 定义待找钱币类型。默认从小到大排列。
* 传入参数后,先获得最大的硬币面值。通过整除,得到可以有几种找钱情况
* 递归调用找钱,因为排除了最大面额硬币后的可找硬币以余额都发生了变化。可以看作一次新的找钱
* 最终得到所有的找钱方案。封装到List中返回。
* @version TestRePay.java v. 1.0.0 2010-10-26
* @author Andy
*/
public class TestRePay {
public static void main(String[]args){
int i = 150;
int[] coinType = new int[]{1,5,10,25,50};
//调用递归方法
ListString allResult = reCoins(coinType, i);
System.out.println("找钱方案的个数为:"+allResult.size());
for(int j = 1 ,k = allResult.size(); j=k;j++ ){
System.out.println(" 第"+j+"种找钱方案为:"+allResult.get(j-1));
}
}
/**
* 通过递归,得到所有的方案数量
* author Andy
* date 2010-10-26 下午01:30:06
* @param coinType 可以找给客户的钱币的类型 为int数组
* @param totalMoney 待找钱的数量
* @return
*/
public static ListString reCoins(int[]coinType , int totalMoney){
//获得最后一个,也就是默认为最大的一个钱币类型
int lastCoin = coinType[coinType.length-1];
//通过数组复制获得下一级调用时候的硬币类型
int[] newCoinType = new int[coinType.length-1];
System.arraycopy(coinType, 0, newCoinType, 0, newCoinType.length);
//获得针对当前硬币,也就是这个lastCoin 有几种找钱情况
int times = totalMoney/lastCoin;
ListString resultList = new ArrayListString();
//如果当前硬币的面值大于余额。但是手中还有更小面值的硬币,则递归调用找钱。
if(times==0coinType.length!=0){
ListString childList = reCoins(newCoinType, totalMoney);
resultList.addAll(childList);
//进行遍历,得到带找钱的值
}else{
//最小面值了,所以,直接返回值
if(coinType.length==1){
resultList.add(" 1分*"+totalMoney+"个 ");
}else{
//不是最小面值,所以,要遍历下
for(int i=1;i=times;i++){
ListString childList = null;
int remainder = totalMoney-lastCoin*i;//新余额
if(remainder != 0){
childList = reCoins(newCoinType, remainder);
for(String r:childList){
r = " "+lastCoin+"分*"+i+"个 " + r;
resultList.add(r);
}
}else{
resultList.add(" "+lastCoin+"分*"+i+"个 ");
}
}
}
}
return resultList;
}
}
加油,java的路 还有很长哦,呵呵
java分零钱代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java钱包、java分零钱代码的信息别忘了在本站进行查找喔。







