java版,用最少数量的货币买价格为m的商品,最大货币面额为1,2,3....最大面额n

第一题 不同面额货币购物问题
题目:用最少数量的货币买价格为m的商品,最大货币面额为1,2,3....最大面额n
测试样例: //面额最大为4块的货币买18元的商品,用了5个货币
输入: 4 18
输出:5

解题思路:m/n的除数就是货币数,定义一个count做累加。然后将余数赋值给m,继续m/n到m==0,但是n最大面额值变下一个n--

import java.util.Scanner;

public class Test1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 输入最大面额n,和商品加价格m
int n = scanner.nextInt();
int m = scanner.nextInt();
int price = function(n,m);
System.out.println(price);
}

public static int function(int n,int m) {
// 如果最大面额n已经大于商品价格m时,直接用一个最大面额的货币就行
if (n >= m) {
return 1;
}
// 支付的硬币数量
int count = 0;
while (m != 0) {
// 如果价格m是很多倍的最大面额n,比如18/4=4余2,先把4复制给count,
// 就是余数继续除以下一个面额,直到余数为0,跳出循环
count += m / n;
m = m % n;
// 最大面额减一再进入循环,就是用下一面额值
n--;
}
return count;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值