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(" ");
}
}
/**
* 机试题:找零钱
* 当前零钱: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(" ");
}
}