zqz


私信TA

用户名:wxhnzll357159

访问量:12223

签 名:

心之所向,且随风而去

等  级
排  名 1196
经  验 3111
参赛次数 2
文章发表 6
年  龄 20
在职情况 学生
学  校 哔哩大学
专  业 计算机科学与技术

  自我简介:

TA的其他文章

解题思路:

在做这道题的时候我也是思考了很久,一直没有头绪,在查看了很多人的解法后,我觉得暴力求解最适合我,这里也将自己的理解分享给大家,我认为暴力求解是不走任何捷径的,从一开始依次去验证到末尾,直到得出答案(个人理解),在这个题中,它要求得是最大不能组合的数,对于这个最大,常规的想肯定是很难的,不然各位小伙伴也不会到解题区寻求思路,我就假设这个数在100000之内(范围足够大),后台测试数据中的最大不能组成值应该都在这个范围内,我定义一个数组a[101000],初值均为0,之所以多加1000,那是因为输入的两个数范围都不超过1000,所以在循环100000次中,a[i+m],a[i+n],(m,n为两个输入的数)才不会导致数组越界,以至于报错,输入的两个数m,n,最小的数以下的数都是不能都由m,n组合的,所以循环从i=最小的开始循环,由于m,n本身符合可以由他们组成,所以循环开始时,a[m]=a[n]=1,(1代表可以组成的数,0代表不能组成)在循环体中,如果a[i]==1,那么a[i+m]和a[i+n]也是可以由他们组合而成的,所以都为1,如果a[i]!=1,那就将i赋给不能合成的数imax,从最小输入数一直循环到100000,最后一次赋给imax的数,就是最大不能合成的数,输出即可。

图形:便于参考理解(图形借鉴他人)


QQ图片20210323213812.png

参考代码:

#include<iostream>
using namespace std;
int main()
{
 int m,n,imax,i,a[101000]={0};
 cin>>m>>n;
 a[m]=a[n]=1;
 if(m>n)
 {
  i=m;
  m=n;
  n=i;
 }
 for(i=m;i<100000;i++)
 {
  if(a[i]==1)
  a[i+m]=a[i+n]=1;
  else
  imax=i;
 }
 cout<<imax<<endl;
 return 0;
 }


 

0.0分

29 人评分

  评论区

棒棒的
2023-03-10 20:59:00
谢谢
2022-04-03 22:04:47
这个内存貌似会溢出
2022-03-17 20:45:30
  • «
  • 1
  • »