第十四届蓝桥杯 三十天刷题 第十八天

文章介绍了三个编程问题的解决方案:使用Arrays.sort()对字符数组进行排序,通过更相减损术计算最大公约数(GCD),以及在Java中处理异或选择问题。示例代码展示了具体的实现方法。
摘要由CSDN通过智能技术生成

📢📢📢哈喽大家好,来看今天的题目吧


  1. 📮📮📮排列字母📮📮📮

📋问题描述

❓思路分享

📮这道题用到一个冷知识:Arrays.sort()方法也是可以给字符数组排序滴。

📗参考代码

import java.sql.SQLOutput;
import java.util.Arrays;

/**
 * @ClassName 排列字母
 * @Author @浅夜
 * @Date 2023/3/21 20:29
 * @Version 1.0
 */

public class 排列字母 {
    public static void main(String[] args) {
        String s = "WHERETHEREISAWILLTHEREISAWAY";
        char[] c = s.toCharArray();
        Arrays.sort(c);
        s = new String(c);
        System.out.println(s);
    }
}


  1. 🎈🎈🎈GCD🎈🎈🎈

📋问题描述

❓思路分析

🎈说实话看到这道题一点头绪都没有,想了一会也想不出来就点进了梗佬的题解,看了之后恍然大悟,才知道自己对gcd的性质不够熟悉。

🎈根据更相减损术可以得到:gcd(a,b) = gcd(a,b - a) 前提是b>=a,那么就可以得到题目中的式子:gcd(a + k,b + k) = gcd( a + k , b - a),我们设b - a = c,那么就是求gcd( a + k , c),显然这个式子的最大公约数就是c了,我们求出给a增加多少是c的倍数就是k了。

📗参考代码

import java.util.Scanner;

/**
 * @ClassName GCD
 * @Author @浅夜
 * @Date 2023/3/21 20:53
 * @Version 1.0
 */

public class GCD {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long a = sc.nextLong();
        long b = sc.nextLong();
        long c = Math.abs(b - a);
        long k = c - a%c;
        System.out.println(k);
    }

//    static int gcd(int a, int b) {
//        return b == 0 ? a : gcd(b, a % b);
//    }
}


  1. 🍖🍖🍖选数异或🍖🍖🍖

📋问题描述

📗参考代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @ClassName 选数异或
 * @Author @浅夜
 * @Date 2023/3/21 21:34
 * @Version 1.0
 */

public class Main {
    public static void main(String[] args) throws IOException, IOException {
        Scanner input = new Scanner(System.in);

        StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

        st.nextToken();

        int n = (int) st.nval;

        st.nextToken();

        int m = (int) st.nval;

        st.nextToken();

        int x = (int) st.nval;

        Map map = new HashMap<Integer, Integer>();

        int[] dp = new int[200000];

        for (int i = 1; i <= n; i++) {
            st.nextToken();

            int tmp = (int) st.nval;

            dp[i] = Math.max(dp[i - 1], (int) map.getOrDefault(tmp ^ x, Integer.MIN_VALUE));

            map.put(tmp, i);

        }

        for (int i = 0; i < m; i++) {
            st.nextToken();

            int l = (int) st.nval;
            st.nextToken();

            int r = (int) st.nval;

            if (dp[r] >= l) System.out.println("yes");

            else System.out.println("no");

        }

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值