判断元素是否存在(递归)(计蒜客)(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
            }
        }
    }
}

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用归来判断多层Map中是否存在create_time属性,具体代码如下: ```java public static boolean isExistCreateTime(Map<String, Object> map) { for (Map.Entry<String, Object> entry : map.entrySet()) { Object value = entry.getValue(); // 如果value是Map类型,则归调用isExistCreateTime方法 if (value instanceof Map) { boolean result = isExistCreateTime((Map<String, Object>) value); if (result) { return true; } } else if (entry.getKey().equals("create_time")) { return true; } } return false; } ``` 以上代码中,我们首先遍历Map中的每一个键值对,如果对应的值是一个Map类型,则归调用isExistCreateTime方法来查找是否存在create_time属性。如果存在,则返回true。如果对应的值不是Map类型,我们判断该键是否为create_time,如果是,则返回true。如果遍历完整个Map都没有找到create_time属性,则返回false。 使用方法如下: ```java Map<String, Object> map = new HashMap<>(); map.put("key1", "value1"); Map<String, Object> innerMap = new HashMap<>(); innerMap.put("key2", "value2"); innerMap.put("create_time", "2021-07-01 10:00:00"); map.put("key3", innerMap); boolean result = isExistCreateTime(map); if (result) { System.out.println("存在create_time属性"); } else { System.out.println("不存在create_time属性"); } ``` 以上代码中,我们创建一个多层Map,然后调用isExistCreateTime方法来判断是否存在create_time属性。如果存在,则输出存在,否则输出不存在

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值