Data8.2买不到的数目

问题描述

小明开了一家糖果店。他别出心裁:把水果糖包成 4 颗一包和 7 颗一包的两种。糖果不能拆
包卖。
小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比
如要买 10 颗糖。

你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是 17。大于 17 的任何
数字都可以用 4 和 7 组合出来。

  • 本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。

输入格式

  • 两个正整数,表示每种包装中糖的颗数(都不多于 1000)

输出格式

  • 一个正整数,表示最大不能买到的糖数

样例输入 1

4 7

样例输出 1

17

样例输入 2

3 5

样例输出 2

7

思路

  • 包装中糖果的颗数是一定可以能卖出的组合数,则可以标记为1;能组合为1;不能组合为0;
  • 当遍历array数组时,被遍历的数组值是1,则可以将array[i+a]和array[i+b]标记为1,说明改数组值可以被组合,并且count++;
  • 如果遍历array数组时,被遍历的数组值是0,则需要将数值下标改变到所遍历的值下标,统计的count需要重置为0;
  • 举例子:3 5包装的糖果;当数组遍历从1-2,都为0,当遍历到3时,数组值为1,则array【3+3】=array【6】=1,array【3+5】=array【8】=1,也就是相当于,一开始123456789都为0,我们赋值3 和5都为1,随着遍历后,6 和8被赋值为1,8和10赋值为1,9和11被赋值为1,因为56891011...都被赋予为1,则可以得出7为最大的不可组合值。

代码

package data;
import java.util.Scanner;
public class Data82 {
    public static void main(String[] args)
    {
        Scanner cin = new Scanner(System.in);
        int a = cin.nextInt();
        int b = cin.nextInt();
        int max = a>b?a:b;//计算两个糖果数量的最大值;
        int array[] = new int[100000];
        array[a] = 1;
        array[b] = 1;
        int number = 0;//标记不能组合的下标;
        int count = 0;//统计可以组合的连续个数;
        for(int i = 1;i<array.length;i++)
        {
            if(array[i] == 0)
            {
                number = i;
                count = 0;
            }
            else
            {
                array[i+a] = 1;
                array[i+b] = 1;
                count = count+1;
            }
            if(count >= max)
            {
                break;
            }
        }
        System.out.println(number);
    }
}

Data8.2买不到的数目

上一篇:需求解决 _按条件显示标签 _20210827


下一篇:牛牛的滑动窗口