拿题目给的样例套题目的公式就可以推出来结果:
四种情况
第一种:
我们可以反着推,假设我们已经知道了2k+1=22,我们用y来代替22
这个时候我们推出来的k值与题目输入的k值如果相同,那么就说明y是我们要找的值。
第二种情况:
答案可能在右半部分,即部分,那我们求k值的公式就是:
第三种情况:
2k+1,3k+1找到的值都是一样的,比如,当k=0,x=1时,
2k+1,3k+1求出的值都是1。
公式为:
第四种可能:
题目输入的k值和x值是同一个数值,那就不用找了,直接返回。
code
#include<iostream>
using namespace std;
int k;
int find(int x)
{
//四种情况
if(k==x)return 1;
if((x-1)%3==0&&(x-1)%2==0) return find((x-1)/3)||find((x-1)/2);
if((x-1)%3==0) return find((x-1)/3);
if((x-1)%2==0) return find((x-1)/2);
return 0;//没找到就return 0;
}
int main()
{ char c;
int x;cin>>k>>c>>x; //输入k c x其中c是','
if(find(x))//如果找到了
cout<<"YES"<<endl;
else cout<< "NO"<<endl;
return 0;
}