第一题 不同面额货币购物问题
题目:用最少数量的货币买价格为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;
}
}