解题思路:设输入的两个数分别为min,max,则可以看出,若x(x>max),x+1,x+2,...,x+min-1这连续的min个数都可以用min,max组合表示,则大于x+min-1的数一定也都可以,这就是循环的结束条件,也是此题关键。此题只能暴力求解,你尽可能优化算法使它少尝试一些次数就好了,这题宽容度很高,很容易过。


证明:x可以用min,max两个数组合表示,那x+min肯定也行。x+1可以用min,max两个数组合表示,那x+1+min肯定也行。由此类推,大于x+min-1的数都能用min,max组合表示。


注意事项:为什么说此题不好,因为答案可用公式计算,结果为min*max-min-max,并且,当min和max同为偶数时,此题无解,因为奇数不能由偶数组合而成。

不过他的测试用例不会出现两个偶数的。

参考代码:

#include

using namespace std;

int a1,a2;//输入的两个数 

int attempt(int now,int mi,int ma)//判断now这个数能否用mi和ma表示,能返回1,不能返回0 

{                                 //ma表示两个数中大的那个,mi表示小的 

for(int i=0;i<=now/ma;i++)//依次尝试0个ma,1个ma,2个ma...(now/ma)个ma 

{

if((now-i*ma)%mi==0)

{

return 1;

}

}

return 0;

}

int main()

{

cin>>a1>>a2;

int max_num=max(a1,a2);

int min_num=min(a1,a2);

int fa=max_num+1;//从max_num+1开始尝试 

int now_max_ans=fa;//now_max_ans表示目前最大题解 

int times=0;//连续多少个数能用a1,a2表示 

while(1)

{

if(attempt(fa,min_num,max_num))

{

times++;

}

else

{

times=0;

now_max_ans=fa;

}

if(times==min_num)//当连续min_num个数都能用a1,a2表示时,说明之后的数都能,故跳出循环

{

break;

}

fa++;

}

cout<<now_max_ans;

return 0;

}


点赞(0)
 

0.0分

3 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论