我是靠谱客的博主 顺心抽屉,最近开发中收集的这篇文章主要介绍找零钱 (贪心)->动态规划,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题 G: 找零钱

时间限制: 1 Sec   内存限制: 128 MB
献花: 35   解决: 35
[ 献花][ 花圈][ TK题库]

题目描述

小智去超市买东西,买了不超过一百块的东西。收银员想尽量用少的纸币来找钱。
纸币面额分为50 20 10 5 1 五种。请在知道要找多少钱n给小明的情况下,输出纸币数量最少的方案。 1<=n<=99;

输入

有多组数据  1<=n<=99;

输出

对于每种数量不为0的纸币,输出他们的面值*数量,再加起来输出

样例输入

25
32

样例输出

20*1+5*1
20*1+10*1+1*2
本题是简单的贪心,优先选取纸币最大的,因为,纸币面值越大,最后得出的纸币一定数量最少。
package three;

import java.util.Scanner;

public class Main {
	public static int[] coinsValues = {50, 20, 10, 5, 1};
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		
		while (in.hasNext()) {
			int n = in.nextInt();
			int a1 = n/50; int a2 = n%50;
			int b1 = a2/20; int b2 = a2%20;
			int c1 = b2/10; int c2 = b2%10;
			int d1 = c2/5; int d2 = c2%5;
			int e1 = d2; int e2 = e1;
			
			int[] keys = new int[5];
			int[] value = new int[5];
			keys[0] = a1; value[0] = a2;
			keys[1] = b1; value[1] = b2;
			keys[2] = c1; value[2] = c2;
			keys[3] = d1; value[3] = d2;
			keys[4] = e1; value[4] = e2;
			
			int flag = 0;
			for (int i = 0; i < 5; i++) {
				if (keys[i] != 0) {
					if (flag == 0) {
						System.out.print(coinsValues[i]+"*"+keys[i]);
						flag = 1;
					} else {
						System.out.print("+");
						System.out.print(coinsValues[i]+"*"+keys[i]);
					}
				}
			}
			System.out.println();
		}	
	}
}

最后

以上就是顺心抽屉为你收集整理的找零钱 (贪心)->动态规划的全部内容,希望文章能够帮你解决找零钱 (贪心)->动态规划所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部