搜索
您的当前位置:首页判断元素是否存在(递归)(计蒜客)(java)

判断元素是否存在(递归)(计蒜客)(java)

来源:世旅网

1.题目原文

蒜头君有一个集合 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"

输出时每行末尾的多余空格,不影响答案正确性

样例输入

0,22

样例输出

YES

2.解题思路

因为k<=X,因此可以使用递归查找,如果k==x就返回true,否则就查找x和2k+1是否匹配,是就返回true否则查找X和3*K死否匹配,如果匹配就返回true,最后如果前面的都不匹配就返回false,调用函数时如果返回值是true就输出YES否则输出NO。

3.解题代码

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
            }
        }
    }
}

原创不易,三连支持一下吧

因篇幅问题不能全部显示,请点此查看更多更全内容

Top