暴力搜索,打表找规律。
#include <cstring>
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
bool dfs(int m,int p,int q){
if(m==0)return true;//找到的叶子节点完全由规定的两个数构成
if(m>=p&&dfs(m-p,p,q))return true;//基本思想:先比较大小,然后不断减去该子树结点值之后查找是否存在叶子结点的值为找的那两个数一个
if(m>=q&&dfs(m-q,p,q))return true;
return false;//就是一颗递归搜索树
}
int main()
{
int n,m,res=0;
cin>>n>>m;
for (int i = 1; i <= 1000; i ++ ){
if(!dfs(i,n,m)){//递归树里找不到这个数
res=i;
}
}
cout<<res<<endl;
return 0;
}根据这个暴力搜索我们可以打表找规律,如下:
3 2 1
3 4 5
3 5 7
3 7 11
3 8 13大致可以发现规律为n=3时,m+1,res+2
故res=2m+x
代入数据得x=-3
推得公式为res=2m-3;(n=3)
同理,多推几个公式
4 7 17
4 9 23
4 11 29res=3m-4(n=4)
最后整理得到大致公式res=(n-1)*(m-1)-1.
#include <cstring>
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
int n,m,res=0;
cin>>n>>m;
cout<<(n-1)*(m-1)-1<<endl;
return 0;
}
文章通过一个C++程序展示了暴力搜索算法在解决特定问题中的应用,即寻找特定条件下不存在的数。通过递归函数dfs进行搜索,并通过打表找到数值之间的规律。总结出的公式为res=(n-1)*(m-1)-1,其中n和m是输入参数。

被折叠的 条评论
为什么被折叠?



