「java计算找钱」java找钱问题

博主:adminadmin 2023-01-13 19:27:05 315

今天给各位分享java计算找钱的知识,其中也会对java找钱问题进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

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实现)

public getMin{

public int MinNumber=0;

public int findMax(int[] a){

for(int i=0;ia.length;i++){

if(a[i]==0) return a[--i];

}

return a[a.length-1];

}

public boolean Compare(int a,int b){

public boolean flag=true;

if(ab) flag=flase;

return flag;

}

public int getMinNumber(int[] M,int Money){

int[] findM=new int[M.length];

int index=0;

for(int i=0;iM.length;i++){

boolean f = this.Compare(M[i],money)

if(f) findM[index++]=M[i];

}

int max = this.findMax(findM);

MinNumber++;

if((Money-max)!=0) {

getMinNumber(M,Money-max)

}

return MinNumber;

}

public int[] Start(){

System.out.println("请输入查询组数");

int group=System.in.read();

int[] M={1,2,5,10,20,50,100};

int[] Result = new Int[group];

int index=0;

while (group-- 0){

System.out.println("请输入金额");

int money=System.in.read();

Result[index++] = getMinNumber(M,money);

MinNumber=0;

}

}

public void print(int[] MinNumber){

for(int i=0;iMinNumber.length.i++){

System.out.println(MinNumber[i]+" ");

}

}

}

public static void main(String[] args){

new getMin().print(new getMin().Start());

}

没测试啊,有问题请勿喷,呵呵

用JAVA找钱

大哥我是问你不论25分,10分,5分 和1分出现次数只要 =钱数就行?

import java.util.Vector;

public class Test {

Vector sub = new Vector();

Vector count = new Vector();

public Test(){

sub.add(25);

sub.add(10);

sub.add(5);

sub.add(1);

count = parse(100);

result();

}

public Vector parse(int num){

for(int i=0; isub.size(); i++){

int tempSub = Integer.parseInt(sub.elementAt(i).toString());

int c = num/tempSub;

num = num - c*tempSub;

count.add(c);

}

return count;

}

public void result(){

for(int i=0; isub.size();i++){

System.out.println(sub.elementAt(i).toString()+":"+count.elementAt(i).toString()+"个");

}

}

public static void main(String args[]){

new Test();

}

}

有啥不合理的自己改下

java计算找钱的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java找钱问题、java计算找钱的信息别忘了在本站进行查找喔。