解题思路:
(1)本题的题目不太好读懂,读懂的话,就很好做了
(2)如果k是M集合的元素的话,那么2*k+1和3*k+1也是M集合的元素,当k为0的时候,1也是M的元素,当1是M的元素的话,3和4同样也是,(2*1+1=3,3*1+1=4),依次类推,层层递进
(3)那么可以设置一个bool的递归函数f(int num),递归出口在哪里?如果计算出来的num值和x相等的话,说明包含这个元素,如果num>x的话,就没有必要再往下递进,因为每个数产生的两个数都是比num大的。
(4)如果num<x,return f(num*2+1)||f(num*3+1)(逻辑运算符或可真是神来之笔!)
#include<bits/stdc++.h>
using namespace std;
int k,x;
bool f(int num)
{
if(num>x)
return false;
if(num==x)
return true;
return f(2*num+1)||f(3*num+1);
}
int main()
{
char ans;
cin>>k>>ans>>x;
if(f(k)==1)
cout<<"YES";
else
cout<<"NO";
return 0;
}