版权声明:华天才原创 https://blog.csdn.net/weixin_43891469/article/details/85104450
题目描述
有一个集合M是这样生成的:
(1) 已知k是集合M的元素;
(2) 如果y是M的元素,那么,2y+1和3y+1都是M的元素;
(3) 除了上述二种情况外,没有别的数能够成为M的一个元素。
问题:
任意给定k和x,请判断x是否是M的元素。
这里的k是无符号整数,x 不大于 100000。
如果是,则输出YES,否则,输出NO。
输入
输入整数 k 和 x, 逗号间隔。
输出
如果是,则输出 YES,否则,输出NO。
标程
#include<bits/stdc++.h>
using namespace std;
int k,x;
bool flag;
bool dfs(int a,int b)
{
if(a>b)return false;
if(a>100000)return false;
if(a==b)return true;
flag=dfs(a*2+1,b)||dfs(3*a+1,b);
return flag;
}
int main()
{
scanf("%d,%d",&k,&x);
if(dfs(k,x)==true){
cout<<"YES"<<endl;
return 0;
}
cout<<"NO"<<endl;
return 0;
}