下图所示为简易自动售货机,物品架1、2上共有10样商品,按顺序进行编号分别为1~10,标有价格与名称,一个编号对应一个可操作按钮,供选择商品使用。如果物品架上的商品被用户买走,储物柜中会自动取出商品送到物品架上,保证物品架上一定会有商品。用户可以一次投入较多钱币,并可以选择多样商品,售货机可以一次性将商品输出并找零钱。
用户购买商品的操作方法如下。
(1)从“钱币入口”放入钱币,依次放入多个硬币或纸币。钱币可支持1元(纸币、硬币)、2元(纸币)、5元(纸币)、10元(纸币),放入钱币时,控制器会先对钱币进行检验以识别出币值,并统计币值总额,显示在控制器显示屏中,提示用户确认钱币放入完毕。
(2)用户确认钱币放入完毕,便可选择商品,只要用手指按对应商品外面的编号按钮即可。每选中一样商品,售货机控制器会判断钱币是否足够购买,如果钱币足够,自动根据编号将物品进行计数和计算所需钱币值; 如果钱币不足,则结束购物。
请为自动售货机编程,输入钱币值序列,以-1作为结束,依次输入多个购买商品编号,若编号超出范围或余额不足则输入结束,输出钱币总额与找回零钱(找零要求按人民币的实际流通币值,取张数最少),以及所购买商品名称及数量。
输入输出示例:
输入:
1 1 2 2 5 5 10 10 -1 /*钱币序列*/
1 2 3 5 1 6 9 10 -1 /*物品编号*/
输出:
Total:36yuan, change:19 yuan(10 x 1 + 5 x 1 + 1 x 4)
Table-water:2;Table-water:1;Table-water:1;Milk:1;Beer:1;Oolong-Tea:1;Green-Tea:1;
笨方法:
import java.util.Scanner;
public class p3 {
public p3() {
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int total = 0;
int needmoney = 0;
int n1 = 0;
int n2 = 0;
int n3 = 0;
int n4 = 0;
int n5 = 0;
int n6 = 0;
int n7 = 0;
int n8 = 0;
int n9 = 0;
int n10 = 0;
int num1;
int num2;
int num3;
int change;
do {
num1 = in.nextInt();
if (num1 == 1) {
total += num1;
}
if (num1 == 2) {
total += num1;
}
if (num1 == 5) {
total += num1;
}
if (num1 == 10) {
total += num1;
}
if (num1 == -1) {
do {
num1 = in.nextInt();
if (num1 == 1) {
++needmoney;
++n1;
}
if (num1 == 2) {
++needmoney;
++n2;
}
if (num1 == 3) {
++needmoney;
++n3;
}
if (num1 == 4) {
needmoney += 2;
++n4;
}
if (num1 == 5) {
needmoney += 2;
++n5;
}
if (num1 == 6) {
needmoney += 3;
++n6;
}
if (num1 == 7) {
needmoney += 3;
++n7;
}
if (num1 == 8) {
needmoney += 3;
++n8;
}
if (num1 == 9) {
needmoney += 4;
++n9;
}
if (num1 == 10) {
needmoney += 4;
++n10;
}
if (num1 == -1) {
num1 = needmoney / 10;
num2 = (needmoney - 10 * num1) / 5;
num3 = needmoney - 10 * num1 - 5 * num2;
change = total - needmoney;
int nm1 = change / 10;
int nm2 = (change - 10 * nm1) / 5;
int nm3 = change - 10 * nm1 - 5 * nm2;
if (change < 0) {
System.out.println("钱币不足,请重新投入!");
System.out.print("Total:" + total + "yuan, change:" + needmoney + "yuan(10x" + num1 + "+5x" + num2 + "+1x" + num3 + ")");
return;
}
System.out.println("Total:" + total + "yuan, change:" + change + "yuan(10x" + nm1 + "+5x" + nm2 + "+1x" + nm3 + ")");
if (n1 >= 1) {
System.out.print("Table-water:" + n1 + ";");
}
if (n2 >= 1) {
System.out.print("Table-water:" + n2 + ";");
}
if (n3 >= 1) {
System.out.print("Table-water:" + n3 + ";");
}
if (n4 >= 1) {
System.out.print("Coca-Cola:" + n4 + ";");
}
if (n5 >= 1) {
System.out.print("Milk:" + n5 + ";");
}
if (n6 >= 1) {
System.out.print("Beer:" + n6 + ";");
}
if (n7 >= 1) {
System.out.print("Orange-Juice:" + n7 + ";");
}
if (n8 >= 1) {
System.out.print("Sprite:" + n8 + ";");
}
if (n9 >= 1) {
System.out.print("Oolong-Tea:" + n9 + ";");
}
if (n10 >= 1) {
System.out.print("Green-Tea:" + n10 + ";");
}
return;
}
} while(num1 >= -1 && num1 <= 10);
System.out.println("请输入正确的物品编号!");
num2 = total / 10;
num3 = (total - 10 * num2) / 5;
change = total - 10 * num2 - 5 * num3;
System.out.print("Total:" + total + "yuan, change:" + total + "yuan(10x" + num2 + "+5x" + num3 + "+1x" + change + ")");
return;
}
} while(num1 == 1 || num1 == 2 || num1 == 5 || num1 == 10 || num1 == -1);
System.out.println("请输入正确的钱币序列!");
num2 = total / 10;
num3 = (total - 10 * num2) / 5;
change = total - 10 * num2 - 5 * num3;
System.out.print("Total:" + total + "yuan, change:" + total + "yuan(10x" + num2 + "+5x" + num3 + "+1x" + change + ")");
}
}