AcWing 1205. 买不到的数目(开一个最小公倍数长度的标记数组)
原题链接
简单
作者:
理想不大
,
2021-03-16 20:48:34
,
所有人可见
,
阅读 281
C++ 代码
/*
4 7
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
先找最小公倍数,开一个长度为最小公倍数的标记数组,数组里最大为0的就是最大的不能组合的数字
29呢? => 25+4 34呢? => 16+18
现在就相当于有 4/7/8/11/12/14...个糖果组成的一袋,到后面应该都能凑出来的
/斜眼笑.gif
*/
#include <iostream>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int gcm;
int min = m<n?m:n;
while(min)
{
if (m%min == 0 && n%min ==0) break;
min--;
}
gcm = n*m/min;
int num[gcm+1] = {0};
for(int i = 0; i<= gcm/n; i++)
{
for (int j = 0; j<=gcm/m; j++)
{
if (i*n+j*m <= gcm) num[i*n+j*m] = 1;
}
}
for (int i = gcm; ; i--)
{
if (num[i]==0) {cout<<i<<endl;return 0;}
}
}