其他分享
首页 > 其他分享> > date8.03 买不到的数目

date8.03 买不到的数目

作者:互联网

买不到的数目

问题描述

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

输入格式

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

输出格式

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

样例输入1

4 7

样例输出1

17

样例输入2

3 5

样例输出2

7

思路

题目要求就是求两个数最大的不可组合数,对于题目中的4和7,值依次是:
4 7
4+4=8 4+7=11 7+7=14
8+4=12 8+7=15 11+4=15 11+7=18 14+4=18 14+7=21
12+4=16 12+7=19 15+4=19 15+7=22 18+4=22 18+7=25 21+4=25 21+7=28
16+4=20 16+7=23 19+4=23 19+7=26.....
像动态规划一样一层一层的求出,发现又15,16,18,19,20,21,22,23,24,没有17,所以17就是最大的不能组合数字,利用数组求出来记录每个数字,可以被组合出的数字使得count++,当遇到一个不能组合的则重置为0,当count的值大于两个数中的最大值时,那上一次记录的不能组合的数便是最大的不能组合数。

代码

package daily;

import java.util.Scanner;

public class d8_03 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int max = Math.max(a,b);//两数中最大值
        int[] arr = new int[10000];

        arr[a] = 1;
        arr[b] = 1;
        int num = 0;//记录不能组合的数字下标
        int count = 0;//统计可以组合数字的连续个数,当遇到不能组合的数字重置
        for (int i = 1;i < arr.length;i++){
            if (arr[i] == 0){//遇到不能组合的数,num记录数字,count重置
                num = i;
                count = 0;
            }else {//arr[i]为1时,i+a,i+b数字也可以组合,赋值1。
                arr[i + a] = 1;
                arr[i + b] = 1;
                count++;
            }
            if(count >= max){
                break;
            }
        }
        System.out.println(num);
    }
}

标签:count,arr,买不到,数字,组合,int,date8.03,17,数目
来源: https://www.cnblogs.com/jing-study/p/15094291.html