蒜头君有一个集合 M 是这样生成的:
问题:给定 k 和 x(0≤k≤x≤10^5),请判断 x 是否是 M 的元素。
如果是,则输出"YES"
,否则,输出"NO"
。
输入格式
输入整数 k 和 x,逗号间隔。
输出格式
如果是,则输出"YES"
,否则,输出"NO"
。
输出时每行末尾的多余空格,不影响答案正确性
样例输入
0,22
样例输出
YES
因为k<=X,因此可以使用递归查找,如果k==x就返回true,否则就查找x和2k+1是否匹配,是就返回true否则查找X和3*K死否匹配,如果匹配就返回true,最后如果前面的都不匹配就返回false,调用函数时如果返回值是true就输出YES否则输出NO。
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String ssString = scanner.next();
BigInteger cBigInteger = new BigInteger(
ssString.substring(0, ssString.indexOf(",")));//拿到第一个数
BigInteger bbBigInteger = new BigInteger(
ssString.substring(ssString.indexOf(",") + 1));//拿到第二个数
int k = cBigInteger.intValue();//赋值(虽然说直接使用也可以
//不过这样做更容易看懂
int x = bbBigInteger.intValue();//赋值
if (search(x, k)) { //调用函数
System.out.println("YES");
} else {
System.out.println("NO");
}
}
public static boolean search(int x, int k) {
if (k == x) { //如果x==k就跳出函数返回一个true
return true;
} else {
if (x > k) { //当x>k的时候进行
if (search(x, 2 * k + 1))//递归查找直到x<k如果没有找到就返回false
return true; //找到就返回true
else if (search(x, 3 * k + 1)) {//同上
return true;
} else {
return false;//上面两个条件都不满足时返回false
}
} else {
return false;//当x<k时结束循环,返回false
}
}
}
}
原创不易,三连支持一下吧
因篇幅问题不能全部显示,请点此查看更多更全内容