假设商店货品价格(R) 都不大于100元(且为整数),若顾客付款(P)在100元内,现有一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。 假定此商店的货币面值只包括:50元(N50)、10元(N10)、 5元(N5)、1元(N1) 四种。
下面为程序的代码:
/************************************************************ Copyright (C), 1988-1999, Huawei Tech. Co., Ltd. FileName: test.cpp Author: Light Version : 1.0 Date: 2018/4/17 Description: 假设商店货品价格(R) 都不大于100元(且为整数),若顾客付款(P)在100元内, 现有一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。 假定此商店的货币面值只包括:50元(N50)、10元(N10)、 5元(N5)、1元(N1) 四种 // 模块描述 Version: 仅用于软件测试,完成作业 // 版本信息 Function List: // 主要函数及其功能 1. History: // 历史修改记录 <author> <time> <version > <desc> Light 18/4/17 1.0 建立函数 ***********************************************************/ package demo; import java.util.Scanner; public class main { /** * 主函数 * @param args */ public static void main (String[] args) { // TODO Auto-generated method stub int pay = 0;//付款金额 int cost = 0;//商品花费 int change = 0;//找钱 @SuppressWarnings("resource") Scanner scanner = new Scanner(System.in); System.out.println("请输入顾客付款金额:"); //对输入的内容进行检测,是否符合规则 try { pay = scanner.nextInt(); if (pay > 100 || pay < 0) { System.out.println("请输入正确的金额"); return; } }catch (Exception e) { System.out.println("请输入合法数字"); return; } System.out.println("请输入商店货品价格:"); //对输入的内容进行检测,是否符合规则 try { cost = scanner.nextInt(); if (cost > 100 || cost < 0) { System.out.println("请输入正确的金额"); return; } else if (cost > pay) { System.out.println("您的消费金额超出支付金额"); return; } }catch (Exception e) { System.out.println("请输入合法数字"); return; } change = pay-cost; //输出此时的付款金额,商品价格,应找金额 System.out.println("付款金额" + pay +" 货品价格" + cost + " 应找总金额:" + change); //获得结果,进行输出 String end = giveChange(change); System.out.println("此次消费应找金额 " + change + " 元,其中应找 " + end); } /** * 以找钱规则找钱 * @param change * @return String//返回最终的找钱结果 */ public static String giveChange(int change) { String str=""; int qianshu;//应该找钱的张数 int leftmoney = change;//还剩下多少钱,初始值为change if (leftmoney / 50 != 0) { qianshu = leftmoney / 50; str = str + qianshu + "张50元 "; leftmoney = leftmoney - qianshu * 50; } if (leftmoney / 10 != 0) { qianshu = leftmoney / 10; str = str + qianshu + "张10元 "; leftmoney = leftmoney - qianshu * 10; } if (leftmoney / 5 != 0) { qianshu = leftmoney / 5; str = str + qianshu + "张5元 "; leftmoney = leftmoney - qianshu * 5; } if (leftmoney / 1 != 0) { qianshu = leftmoney / 1; str = str + qianshu + "张1元 "; leftmoney = leftmoney - qianshu * 1; } //检验是否完全找完 System.out.println("剩余没有找完的钱数为:"+leftmoney); return str; } }