华为OD2023(A卷)基础题28【对称美学】

【对称美学】

对称就是最大的美学,现有一道关于对称字符串的美学。已知:

第1个字符串:R
第2个字符串:BR
第3个字符串:RBBR
第4个字符串:BRRBRBBR
第5个字符串:RBBRBRRBBRRBRBBR
1
2
3
4
5
相信你已经发现规律了,没错!就是第 i 个字符串 = 第 i - 1 号字符串取反 + 第 i - 1 号字符串;

取反(R->B, B->R);

现在告诉你n和k,让你求得第n个字符串的第k个字符是多少。(k的编号从0开始)
 

输入描述

第一行输入一个 T ,表示有 T 组用例:

接下来输入 T行,每行输入两个数字, 表示 n , k

1 <= T <= 100;

1 <= n <= 64;

0 <= k < 2^(n-1);

代码解题:暴力破解存储会爆内存

import java.util.Scanner;

/**
 * 
 * 注释已经很详细了,这里简单说明一下代码逻辑:
 * 首先读取输入的n和k;
 * 然后初始化第一个字符串为R;
 * 依次构造第2~n个字符串,每次构造时先将上一个字符串取反,然后再拼接得到当前字符串;
 * 最后获取第n个字符串的第k个字符并输出即可。
 */
public class OdAb28 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(); // 输入n
        int k = sc.nextInt(); // 输入k

        String res = "R"; // 初始化第一个字符串为R

        // 依次构造第2~n个字符串
        for (int i = 2; i <= n; i++) {
            String temp = reverse(res); // 取反
            res = temp + res; // 拼接
        }
        System.out.println("第n个字符:" + res); // 输出结果
        char ans = res.charAt(k); // 获取第n个字符串的第k个字符
        System.out.println("n的第k个字符:" + ans); // 输出结果3
    }

    // 取反
    private static String reverse(String s) {
        StringBuilder sb = new StringBuilder();
        for (char c : s.toCharArray()) {
            if (c == 'R') {
                sb.append('B');
            } else {
                sb.append('R');
            }
        }
        return sb.toString();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值