买不到的数目

买不到的数目

问题描述
小明开了一家糖果店。他别出心裁:把水果糖包成 4 颗一包和 7 颗一包的两种。糖果不能拆
包卖。
小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比
如要买 10 颗糖。
你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是 17。大于 17 的任何
数字都可以用 4 和 7 组合出来。
本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。
输入格式
两个正整数,表示每种包装中糖的颗数(都不多于 1000)
输出格式
一个正整数,表示最大不能买到的糖数

样例输入 1
4 7
样例输出 1
17

样例输入 2
3 5
样例输出 2
7

解题思路:

要找到一个最大不能买到的数量,那这个数量的上限 n 怎么求?

感谢 zhb1nk 的解题思路https://blog.csdn.net/zhaohaibo_/article/details/79544497?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162836020616780261925848%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162836020616780261925848&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-79544497.first_rank_v2_pc_rank_v29&utm_term=买不到的数目&spm=1018.2226.3001.4187

看了上面这篇文章之后可以知道,这个数量的上限 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));
    }
}
运行结果

在这里插入图片描述

posted @ 2021-08-08 02:54  小芦荟同学  阅读(40)  评论(0编辑  收藏  举报