灰太狼


私信TA

用户名:13550559052

访问量:600

签 名:

等  级
排  名 37998
经  验 401
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校 西华大学
专  业

  自我简介:

TA的其他文章

解题思路:设输入的两个数分别为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分

3 人评分

  评论区

  • «
  • »