买不到的数目
作者:互联网
买不到的数目
问题描述
小明开了一家糖果店。他别出心裁:把水果糖包成 4 颗一包和 7 颗一包的两种。糖果不能拆
包卖。
小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比
如要买 10 颗糖。
你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是 17。大于 17 的任何
数字都可以用 4 和 7 组合出来。
本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。
输入格式
两个正整数,表示每种包装中糖的颗数(都不多于 1000)
输出格式
一个正整数,表示最大不能买到的糖数
样例输入 1
4 7
样例输出 1
17
样例输入 2
3 5
样例输出 2
7
解题思路:
要找到一个最大不能买到的数量,那这个数量的上限 n 怎么求?
看了上面这篇文章之后可以知道,这个数量的上限 n 是输入的两个数 a、b 的最小公倍数
不会求最小公倍数的可以看我之前的文章:
核桃的数量https://www.cnblogs.com/l574/p/15072611.html
代码实现
import java.util.Scanner;
public class AmountCannotBuy {
//求最大公约数
public static int gcd(int a, int b) {
return a % b == 0 ? b : gcd(b, a % b);
}
//不能买到的数目
public static int cannotBuy(int a, int b) {
int n = a * b / gcd(a, b); //a、b 的最小公倍数
int temp = n;
while (temp > 0) {
if (temp % a == 0 || temp % b == 0)
temp = --n;
else
temp -= a;
}
return n;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
System.out.println(cannotBuy(a,b));
}
}
运行结果
标签:买不到,temp,int,22%,样例,公倍数,数目,public 来源: https://www.cnblogs.com/l574/p/15113988.html