java-每位顾客付款后给出找零钱的最佳组合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java-每位顾客付款后给出找零钱的最佳组合相关的知识,希望对你有一定的参考价值。

  假设商店货品价格(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;
	}
}

  

以上是关于java-每位顾客付款后给出找零钱的最佳组合的主要内容,如果未能解决你的问题,请参考以下文章

贪心算法:柠檬水找零

860,柠檬水找零

day35 860. 柠檬水找零

leetcode 860. 柠檬水找零(Lemonade Change)

1509. 柠檬水找零

LeetCode:柠檬水找零860