您的位置:首页 > 其它

历届试题 买不到的数目(欧几里得 蓝桥杯)

2015-04-04 15:28 197 查看


历届试题 买不到的数目


时间限制:1.0s 内存限制:256.0MB

问题描述

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

输入格式

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

输出格式

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

样例输入1

4 7

样例输出1

17

样例输入2

3 5

样例输出2

7



interesting:算是一题欧几里得的变形吧,也是求不定方程;用题目的已知数据就是:4x+7y =!Cmax;

我们可以这样想,4x+7y=c; 令4x+7y=1;求特解x0和y0 那么扩大cmin =min(4,7);

然后特解扩大c倍,利用(x=x0+7k,y=y0-4k)或(x=x0-7k,y=y0+4k)在x0和y0 小于0的时候将一边扩大,然后判断另一边是否大于0;如果大于0,则说明符合条件,那我就记录连续满足条件的数量cnt,如果cnt比cmin 比大,那么,之后的数必定可以被组成,这就是以个题目的技巧;

我用X表示不能组成,用O表示能组成;eg:(4,7)

1234567891011121314151617181920212224....
XXXOXXOOXXOOXOOOXOOOOOO....

转载请注明出处:

寻找&星空の孩子

题目链接: http://lx.lanqiao.org/problem.page?gpid=T31

#include<stdio.h>
#define LL long long
#define NN 10000005

bool num[NN];
void exgcd(LL a,LL b,LL &d,LL &x,LL &y)
{
    if(b==0)
    {
        d=a;
        x=1;
        y=0;
        return ;
    }
    else
    {
        exgcd(b,a%b,d,y,x);
        y-=x*(a/b);
    }
}
LL gcd(LL a,LL b)
{
    if(!b)return a;
    else
        gcd(b,a%b);
}
int main()
{
    LL m,n,d,x,y;
    scanf("%I64d%I64d",&m,&n);
    exgcd(m,n,d,x,y);
    LL mmin=m<n?m:n;
    LL i=mmin;
 //   printf("x=%I64d\ty=%I64d\n",x,y);
    if(d==1&&mmin>1);
    {
        int cnt=0;
        while(1)
        {
            if(cnt>=mmin){printf("%I64d\n",i-mmin-1);break;}
            LL xx=i*x;
            LL yy=i*y;
 //           printf("xx=%I64d\tyy=%I64d\n",xx,yy);
            if(xx<0)
            {
                while(xx<0)
                {
                    xx+=n;
                    yy-=m;
                }
                if(yy>=0) cnt++;
                else cnt=0;
            }
            else if(yy<0)
            {
                while(yy<0)
                {
                    xx-=n;
                    yy+=m;
                }
                if(xx>=0) cnt++;
                else cnt=0;
            }
            i++;
        }

    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: