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;
	}
}

  

原文地址:https://www.cnblogs.com/suifengye/p/8868345.html

时间: 2024-10-06 17:02:28

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

AgileController Portal认证成功后弹出找不到指定位置的资源

问题描述: Portal认证成功后找不到指定位置的资源 处理过程: 从页面的url连接看是session超时导致,浏览器会记录用户的信息和回话,清楚浏览器缓存重新认证问题解决 原文地址:https://www.cnblogs.com/longlogs/p/11780759.html

(原)关于人民币找零钱的问题

引用请注明出处:http://www.cnblogs.com/lihaiping/p/7799495.html 最近项目开发中遇到一个和找零钱很相似的问题,所以网上搜索了一下,大部分的问题,都是关于如何求出找零钱的方法数(有多少种找零的方法)和如何求少找零的方案. 但我这次的问题,需要在求出找零钱方法数的同时还需要求出这些方法中的每种具体找零方法. 根据网上的代码,求找零方法数种类:(动态规划的算法) 1 int countWays(vector<int> changes, int n, in

Mac 添加java 环境变量成功后,依然会报错 错误: 找不到或无法加载主类

Windows 批处理(bat)文件转换成 Mac 的批处理(sh)文件 1. bat转换成sh文件,注销掉echo ,title字段: 2.将bat文件中的';'分隔符替换成':' ; Mac 添加Java 环境变量 1.打开终端 输入 cd ~ niko:~ mmk$ open -e .bash_profile 打开.bash_profile文件进行编辑: 2.在.bash_profile中添加 JAVA_HOME=`/usr/libexec/java_home` export JAVA_H

虚拟机上的windows安装cwRsyncServer后服务界面找不到服务的解决方案

如果在虚拟机上安装了windows server 2008 R2的话,而且要在虚拟机上做实验的话,那就要安装上虚拟机的工具了,打开虚拟机界面,选择MV(虚拟机)-->Reinstall MVware Tools 然后在弹出的对话框中选择"运行setup64.exe 由MVware, Inc.发布"就可以安装上了. 这样安装好了之后再安装上cwRsyncServer这个服务,这样安装好了之后在服务界面就可以找到RsyncServer这个服务了.如果不安装上的话是即使安装上了这个服务

java虚拟机jvm启动后java代码层面发生了什么?

java虚拟机jvm启动后java代码层面发生了什么? 0000 我想验证的事情 java代码在被编译后可以被jdk提供的java命令进行加载和运行, 在我们的程序被运行起来的时候,都发生了什么事情, 下面就来探究下这个问题, 这个问题被拆成了两个问题, 第一个问题用来确定发生了哪些事情, 第二个问题用来确定这些事情是如何进行的. java进程里面都发生了哪些活动? 这些活动在java代码(反编译或者是源码)级别有所体现吗? 0001 寻找验证的方式 当我在探究上面两个问题时, 我想了很多方式去

捕获Java线程池执行任务抛出的异常

Java中线程执行的任务接口java.lang.Runnable 要求不抛出Checked异常, public interface Runnable { public abstract void run();} 那么如果 run() 方法中抛出了RuntimeException,将会怎么处理了? 通常java.lang.Thread对象运行设置一个默认的异常处理方法: java.lang.Thread.setDefaultUncaughtExceptionHandler(UncaughtExce

nginx配置失败,卸载后重装出问题 awk: cannot open /etc/nginx/nginx.conf (No such file or directory)

nginx配置失败,卸载后重装出问题 [email protected]:~$ sudo apt-get install nginx 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 将会安装下列额外的软件包: nginx-common nginx-core 建议安装的软件包: fcgiwrap nginx-doc 下列[新]软件包将被安装: nginx nginx-common nginx-core 升级了 0 个软件包,新安装了 3 个软件包,要卸载

Visual Studio 打开解决方案后 弹出框显示 &quot;正在打开文件...&quot; 迟迟没反应 的解决方法

Visual Studio 打开解决方案后 弹出框显示 "正在打开文件...",任务管理器的devenv进程又很正常,不会显示"未响应". 而IDE的左下角有个 "正在等待分析完成..." 提示. 刚开始,我以为是VS插件问题,因为我刚安装了一个插件后,重启VS,打开解决方案就出现这个问题了,所以我以为是VS插件问题. 后来我把VS插件通通卸载了,把/ResetAddin /ResetSkipPkgs /ResetSettings 之类的deve

Android点击列表后弹出输入框,所点击项自动滚动到输入框上方(类似微信的评论)

Android点击列表后弹出输入框,所点击项自动滚动到输入框上方 使用微信的朋友圈会发现,点击某一条评论后输入框会弹出来,然后所点击的那一项会自动地滚动到输入框上方的位置,这样如果开始所点击的评论在屏幕很下方的话,就不会被输入框遮住,虽然微信这一点在我的MX2频繁点几次后滚动的位置就完全错误了,但据说在有些机型上效果还不错,还有其他地方可能会有类似的需求,比如登录时软键盘可能会把登录按钮遮住. 要实现这个功能需要注意的地方主要有两点: 什么时候进行滚动操作,以及有可能还需要在输入框消失时回滚回去