原题地址:判断元素是否存在 - 题库 - 计蒜客
蒜头君有一个集合 M 是这样生成的:
(1) 已知 k 是集合 M 的元素;
(2) 如果 y 是 M 的元素,那么,2y+1 和 3y+1 都是 M 的元素;
(3) 除了上述二种情况外,没有别的数能够成为 M 的一个元素。
问题:给定 k 和 x(0≤k≤x≤10^5),请判断 x 是否是 M 的元素。
如果是,则输出"YES",否则,输出"NO"。
输入格式
输入整数 k 和 x,逗号间隔。
输出格式
如果是,则输出"YES",否则,输出"NO"。
AC源码:
#include<iostream>
#include<cstdio>
using namespace std;
int n;//设置全局变量n,用于记录函数中的结果
void set(int k,int x){
if(x==k){
n=1;
}
else{
if((x-1)%3==0)
set(k,(x-1)/3);
if((x-1)%2==0)
set(k,(x-1)/2);
else{
if(n!=1)//如果之前n没有为 1的话,将n设置为0
n=0;
}
}
}
int main(){
int k,x;
while(scanf("%d,%d",&k,&x)!=EOF){
n=0;
set(k,x);
if(n==1)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}