机试题:找零钱

import java.util.Scanner;
/**
 * 机试题:找零钱
 * 当前零钱:50元10张,20元20张,10元50张,5元80张,1元100张,0.5元200张,0.1元500张
 * 输入:需找的钱数
 * 返回:各面额零钱的张数
 * @author LLXQ
 *
 */
public class Main0302 {


public static void main(String[] args) {
// a--50 b--20 c--10 d--5 e--1 f--0.5 g--0.1
// 各面额零钱的剩余张数
int a = 10, b = 20, c = 50, d = 80, e = 100, f = 200, g = 500;
Scanner sc = new Scanner(System.in);
while (true) {
//字符串:由余额+空格+零钱所剩张数组成
String str = "";
// 需找钱
double z = sc.nextDouble();
// 零钱余额总和
double y = 50 * a + 20 * b + 10 * c + 5 * d + 1 * e + 0.5 * f + 0.1 * g;
if (z <= y) {
// 计算50元所需的张数
str = cal(z, a, 50);
//余额
z = Double.parseDouble(getArray(str)[0]);
//当前面额零钱所剩张数
a = Integer.parseInt(getArray(str)[1]);


// 计算20元所需的张数
str = cal(z, b, 20);
//余额
z = Double.parseDouble(getArray(str)[0]);
//当前面额零钱所剩张数
b = Integer.parseInt(getArray(str)[1]);


// 计算10元所需的张数
str = cal(z, c, 10);
//余额
z = Double.parseDouble(getArray(str)[0]);
//当前面额零钱所剩张数
c = Integer.parseInt(getArray(str)[1]);


// 计算5元所需的张数
str = cal(z, d, 5);
//余额
z = Double.parseDouble(getArray(str)[0]);
//当前面额零钱所剩张数
d = Integer.parseInt(getArray(str)[1]);


// 计算1元所需的张数
str = cal(z, e, 1);
//余额
z = Double.parseDouble(getArray(str)[0]);
//当前面额零钱所剩张数
e = Integer.parseInt(getArray(str)[1]);


// 计算0.5元所需的张数
str = cal(z, f, 0.5);
//余额
z = Double.parseDouble(getArray(str)[0]);
//当前面额零钱所剩张数
f = Integer.parseInt(getArray(str)[1]);


// 计算0.1元所需的张数
str = cal(z, g, 0.1);
//余额
z = Double.parseDouble(getArray(str)[0]);
//当前面额零钱所剩张数
g = Integer.parseInt(getArray(str)[1]);
// 每次输出完找钱结果后换行
System.out.println();
} else {
sc.close();
System.out.println("零钱不够");
break;
}
}


}


/**

* @param z   需找钱
* @param num 此面额的零钱剩余张数
* @param m   当前零钱的面额
* @return
*/
public static String cal(double z, int num, double m) {
// 需找的钱
double l = z;
// 所需该零钱张数
int num2;
if ((l / m) > 0) {
num2 = (int) Math.floor(l / m);
if (num2 <= num) {
// 所需此面额的张数
System.out.print((int) (Math.floor(l / m)) + " ");
// 剩余零钱数
num = num - (int) (Math.floor(l / m));
// 剩余需找钱
l = l - (int) (Math.floor(l / m)) * m;
} else {
System.out.print((int) num + " ");
l = l - num * m;
num = 0;
}
}
return l + " " + num;
}


/**
* 拆分字符串
* @param s 需拆分字符串
* @return String[] 拆分后的字符串数组  
*/
public static String[] getArray(String s) {
return s.split(" ");
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值