[蓝桥杯]买不到的数目
4 7
输出样例
17
#include <iostream>
using namespace std;
bool dfs(int i, int n, int m)
{
if (!i)
return true;
if (i >= n && dfs(i - n, n, m))
return true;
if (i >= m && dfs(i - m, n, m))
return true;
return false;
}
int main()
{
int n, m, res;
scanf("%d %d", &n, &m);
for (int i = 1; i < 1000; i++)
if (!dfs(i, n, m))
res = i;
printf("%d", res);
return 0;
}
通过打了多组表,就发现了其具有的一些独特的规律
m | n | d |
3 | 2 | 1 |
3 | 4 | 5 |
3 | 5 | 7 |
3 | 7 | 11 |
3 | 8 | 13 |
3 | 10 | 17 |
相邻组之间n每递增1,d对应的数也加1
很容易发现他是具有一种线性关系的即是(m-1)*n - m
利用输出样例,很好可以验证我们猜想,这样我们就得到了对应的答案。
最后放上代码
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n, m;
scanf("%d %d", &n, &m);
printf("%d", n * m - n - m);
return 0;
}
题后反思
解决问题后我咨询了一位来自北京交大的大佬@锦筝叹和一位来自华师大的大佬@lzw,按照他们的思路,我们将问题转化为一个线性表达式
即是d = ay+bx
a,b要是互质的正整数,x和y要是两个自然数,如果这个数d’不能被表出,则必然d'在表示的时候x或者y必有一个为负,故我们不妨设一个数n = a-b
这样就会有了以下的证明手稿
感谢来自华师大@lzw的相关推导证明
最后我们也就得到了这个题的结论,即两个互质的自然数,所不能表出的最大自然数为 a*b-a-b

添加 家长论坛微信
全部 0条评论