lingyun


私信TA

用户名:15210020303

访问量:71618

签 名:

喝水的鱼

等  级
排  名 26
经  验 15367
参赛次数 8
文章发表 152
年  龄 19
在职情况 学生
学  校 安徽建筑大学
专  业 电气

  自我简介:

程序爱好者


解题思路:





注意事项:





参考代码:

#include<iostream>
#include<algorithm>
using namespace std;
int check(int n,int c,int d)
{
	while(n>0) //不能写成 while(n)(当n<0时也会成立) 
	{
		if(n%c==0||n%d==0)
		return 1;
		if((n-c)%d==0||(n-d)%c==0)
		return 1;
		n-=c+d;
	}
	return 0;
}
int main()
{
	int a,b;
	while(cin>>a>>b)
	{
		int c=min(a,b);
		int d=max(a,b);
		int ok=0,ans=0;
		for(int i=d;;i++) //虽然c和d之间的数目也有买不到的数目,但却不是最大的,故不用考虑
		{
			if(ok==c)
			break;
	        // ok表示可以连续买到的数目,c表示两包糖中较少的那包的糖的数目
            // 如果连续 c个糖果数可以买到,那么之后的所有糖果数都可以买到
            // 假设从糖果数i可以买到,且连续 c 个糖果数都可以买到,即i,i+1,i+2,i+3,...,i+c-1,都可以买到
            // 那么糖果数为 i+c 就可以用 糖果数i 加上c 组合成,以此类推,i+c+1=(i+1)+c,... 
            // 因此从糖果数 i及以后的数目都可以买到,故 i-1 买不到的最大数目 
            // 当然这里是有公式的:a,b为两个质数,则不能用a,b表示的最大的数为: a*b-(a+b) 
            if(check(i,c,d))
            {
            	if(ok==0)
            	{
            		ans=i;
				}
            	ok++;
			}
			else
			{
				ok=0;
			}
		} 
		cout<<ans-1<<endl;
	}
	return 0;
}


 

0.0分

83 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区

a,b互质就行了,不必都是质数
2019-02-27 20:37:26
  • «
  • 1
  • »