首页 > 其他 > 详细

Data8.2买不到的数目

时间:2021-08-30 03:24:28      阅读:5      评论:0      收藏:0      [点我收藏+]

问题描述

小明开了一家糖果店。他别出心裁:把水果糖包成 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买不到的数目

原文:https://www.cnblogs.com/tmtboke/p/15090697.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!