历年试题——买不到的数目

Posted kent

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了历年试题——买不到的数目相关的知识,希望对你有一定的参考价值。

问题描述

小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。

小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。

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

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

输入格式

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

输出格式

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

样例输入1

4 7

样例输出1

17

样例输入2

3 5

样例输出2

7
 
技术分享
//买不到的数目 自己理解后打出来的 
 //利用输入a b 循环相乘又不能超过n(我们定义的比较大的数)
 //然后用数组标记可以买到的数 标记为1 不能买默认都是0 
 //最后遍历数组 如果有连续的a 是可以买到的 那 减去a最近的不能买到 标记为
 //0的那个数值就是 最大买不到数目  其中a要保证是小的那个输入数就行了 
 /*
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
long long n=100000;

int d,x;

int cha(int a[])
{
    int sum=0;
    for(int i=0;i<n;i++)
    {
        if(a[i]==1)
        {
            sum++;
            if(sum>=x) return i-x;//如果连续都可以买到 那减去x就是不能买的数目 
        }
        else
        {
            sum=0;
        }
    }
    return -1;
}


void f(int a,int b)
{
    int c[n];
    for(int i=0;i<n/a;i++)  //为了确保后面的乘a b 不会溢出 
    for(int j=0;j<(n-i*a)/b;j++)
    {
        if(i*a+b*j < n) c[i*a+j*b] =1;//表示可以找到糖果 
        
    }
    
    cout << cha(c);

} 

int main()
{
    cin >> x >> d;
    if(x>d)
    {
        int t=x;
        x=d;
        d=t;
    }
    f(x,d);
    
} 
实现代码

 

以上是关于历年试题——买不到的数目的主要内容,如果未能解决你的问题,请参考以下文章

[蓝桥杯] 买不到的数目

买不到的数目 JAVA

#4051. 买不到的数目

蓝桥杯——说好的进阶之买不到的数目

LQ0222 买不到的数目DP+数学

第四届蓝桥杯javaC组_买不到的数目