zoukankan      html  css  js  c++  java
  • 蓝桥杯之买不到的数目(数学公式或缩小范围+暴力)

    Description

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

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

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

    Input

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

    Output

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

    Sample Input

    样例输入1
    4 7
    
    样例输入2
    3 5

    Sample Output

    样例输出1
    17
    
    样例输出2
    7

    Source

    蓝桥杯
     
    分析:
    两种方法
     
    方法1:两个互质的数a,b,其ax+by不能组成的最大整数为ab-a-b
     
    如果题目给定的两个数不互质的话,那么任何数都能组成,所以给定的a和b一定是互质的!
     
    方法2:假定不能组成的数为x,那么x的范围是[a+b-1,lcm(a,b)],直接在这个范围内暴力即可
    code:
    #include<bits/stdc++.h>
    using namespace std;
    int gcd(int a,int b)
    {
        if(b==0)
            return a;
        return gcd(b,a%b);
    }
    int lcm(int a,int b)
    {
        return (a*b)/gcd(a,b);
    }
    int n,m;
    int f(int x)
    {
        for(int i=0;i<1005;i++)
        {
            for(int j=0;j<1005;j++)
            {
                if(i*n+j*m==x)
                    return 1;
            }
        }
        return 0;
    }
    int main()
    {
        cin>>n>>m;
        int ans=0;
        int k=lcm(n,m);
        for(int i=k;i>=n+m-1;i--)
        {
            if(f(i)==0)
            {
                ans=i;
                break;
            }
        }
        cout<<ans<<endl;
        return 0;
    }
     
  • 相关阅读:
    我爱java系列之---【微服务间的认证—Feign拦截器】
    我爱java系列之---【设置权限的三种解决方案】
    581. Shortest Unsorted Continuous Subarray
    129. Sum Root to Leaf Numbers
    513. Find Bottom Left Tree Value
    515. Find Largest Value in Each Tree Row
    155. Min Stack max stack Maxpop O(1) 操作
    painting house
    Minimum Adjustment Cost
    k Sum
  • 原文地址:https://www.cnblogs.com/yinbiao/p/10490852.html
Copyright © 2011-2022 走看看