概述
问题 G: 找零钱
时间限制: 1 Sec 内存限制: 128 MB献花: 35 解决: 35
[ 献花][ 花圈][ TK题库]
题目描述
小智去超市买东西,买了不超过一百块的东西。收银员想尽量用少的纸币来找钱。
纸币面额分为50 20 10 5 1 五种。请在知道要找多少钱n给小明的情况下,输出纸币数量最少的方案。 1<=n<=99;
纸币面额分为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(); } } }
最后
以上就是顺心抽屉为你收集整理的找零钱 (贪心)->动态规划的全部内容,希望文章能够帮你解决找零钱 (贪心)->动态规划所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复