
正文
java代码找零钱代码 java代码在哪里找
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
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的路 还有很长哦,呵呵
相关问答
Q1: 用Java编写找零钱的程序,当输入数后带2位小数就不执行是怎么回事?
for(ly=1;ly=0;ly--)
这里2元应该是ly=2吧 5元1张 2元1张 1元1张凑不到9诶
我修改java代码找零钱代码了一下java代码找零钱代码你java代码找零钱代码的程序
import java.util.Scanner;
public class Yuan {
public static void main(String[] args)
{
int wy=0,ly=0,yy=0,wj=0,yj=0,lj=0,wf=0,lf=0,yf=0;
System.out.println("请输入应找钱数");
Scanner sc=new Scanner(System.in);
float money=(float)sc.nextDouble();//用float吧 double计算有时会出问题
for(wy=1;wy=0;wy--)
{
for(ly=2;ly=0;ly--)
{
for(yy=1;yy=0;yy--)
{
for(wj=1;wj=0;wj--)
{
for(lj=2;lj=0;lj--)
{
for(yj=1;yj=0;yj--)
{
for(wf=1;wf=0;wf--)
{
for(lf=2;lf=0;lf--)
{
for(yf=1;yf=0;yf--)
{
float sum=(float) (5.0*wy+ly*2.0+yy*1.0+0.5*wj+0.2*lj+0.1*yj+0.05*wf+0.02*lf+0.01*yf);
if(sum==money)
{
if(wy0) System.out.print("五元:"+wy);
if(ly0) System.out.print(" 两元:"+ly);
if(yy0) System.out.print(" 一元:"+yy);
if(wj0) System.out.print(" 五角:"+wj);
if(lj0) System.out.print(" 两角:"+lj);
if(yj0) System.out.print(" 一角:"+yj);
if(wf0) System.out.print(" 五分:"+wf);
if(lf0) System.out.print(" 两分:"+lf);
if(yf0) System.out.print(" 一分:"+yf);
System.out.println("");
}
}
}
}
}
}
}
}
}
}
}
}
Q2: 找零钱问题 [贪心算法](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());
}
没测试啊,有问题请勿喷,呵呵
Q3: 用java编写找零钱程序
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class Test implements KeyListener {
JFrame jf = new JFrame("找零系统");
JLabel author = new JLabel("作者名:XXX");
JLabel priceLabel = new JLabel("价格:");
JLabel pmoneyLabel = new JLabel("付款:");
JTextField priceField = new JTextField();
JTextField pmoneyField = new JTextField();
JLabel gmoney = new JLabel();
public void init() {
jf.setLayout(null);
jf.setSize(170, 170);
jf.setResizable(false);
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
author.setBounds(50, 10, 100, 30);
priceLabel.setBounds(10, 50, 30, 20);
pmoneyLabel.setBounds(10, 80, 30, 20);
priceField.setBounds(50, 50, 100, 20);
pmoneyField.setBounds(50, 80, 100, 20);
gmoney.setBounds(40, 110, 100, 20);
jf.add(author);
jf.add(priceLabel);
jf.add(pmoneyLabel);
jf.add(priceField);
jf.add(pmoneyField);
jf.add(gmoney);
priceField.addKeyListener(this);
pmoneyField.addKeyListener(this);
}
public static void main(String[] args) {
new Test().init();
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
if (!priceField.getText().equals("")
!pmoneyField.getText().equals("")) {
try {
float price = Float.parseFloat(priceField.getText());
float pmoney = Float.parseFloat(pmoneyField.getText());
gmoney.setText("找零:" + (pmoney - price) + "元");
} catch (NumberFormatException e1) {
JOptionPane.showMessageDialog(jf, "输入错误!", "出错java代码找零钱代码了",
JOptionPane.ERROR_MESSAGE);
priceField.setText("");
pmoneyField.setText("");
gmoney.setText("");
}
} else {
gmoney.setText("");
}
}
public void keyTyped(KeyEvent e) {
}
}
java代码找零钱代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java代码在哪里找、java代码找零钱代码的信息别忘了在本站进行查找喔。







