华为OD机试 - 对称美学(Python/JS/C/C++ 2024 E卷 100分)

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

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

第1个字符串:R
第2个字符串:BR
第3个字符串:RBBR
第4个字符串:BRRBRBBR
第5个字符串:RBBRBRRBBRBBBRR

相信你已经发现规律了,没错!就是第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) - 1;

三、输出描述

输出T行示例答案;

输出“blue”表示字符等于B;
输出“red”表示字符等于R;

注:输出字符Q区分大小写,请注意输出小写字符串,不带双引号。

四、测试用例

测试用例1:

1、输入

5
1 0
2 1
3 2
4 6
5 8

2、输出

red
red
blue
blue
blue

3、说明

第1个字符串:R -> 第0个字符为R
第2个字符串:BR -> 第1个字符为R
第3个字符串:RBBR -> 第2个字符为B
第4个字符串:BRRBRBBR -> 第6个字符为B
第5个字符串:RBBRBRRBBRBBBRR -> 第8个字符为B

测试用例2:

1、输入

3
1 0
2 0
3 3

2、输出

red
blue
red

3、说明

第1个字符串:R -> 第0个字符为R
第2个字符串:BR -> 第0个字符为B
第3个字符串:RBBR -> 第3个字符为R

五、解题思路

题目要求在生成的对称字符串中,找到第n个字符串的第k个字符。观察字符串的生成规律,我们发现每个字符串都是前一个字符串取反后与前一个字符串拼接而成的。这种递归生成的方式使得我们可以利用递归思想来解决问题,而无需实际生成字符串。

具体步骤如下:

  1. 递归基准:当n=1时,字符串为"R",所以第0个字符是’R’。
  2. 递归步骤:
    • 计算前一个字符串的长度,即mid = 2^(n-2)。
    • 如果k小于mid,说明第k个字符位于取反后的部分,此时递归查找第n-1个字符串的第k个字符,并取反。
    • 如果k大于等于mid,说明第k个字符位于前一个字符串的部分,此时递归查找第n-1个字符串的第(k - mid)个字符。
  3. 字符取反:‘R’取反为’B’,‘B’取反为’R’。
  4. 输出:根据查找到的字符,输出"red"或"blue"。

这种方法避免了直接生成可能非常大的字符串(n最大为64时字符串长度为2^63),提高了效率。

六、Python算法源码

# 导入sys模块用于读取输入
import sys# 定义递归函数,用于获取第n个字符串的第k个字符
def get_char(n, k):# 基准情况:n=1时,字符串只有一个字符'R'if n == 1:return 'R'# 计算前一个字符串的长度,即2^(n-2)mid = 1 << (n - 2)if k < mid:# 如果k在前半部分,取反后递归查找c = get_char(n - 1, k)return invert(c)  # 取反else:# 如果k在后半部分,直接递归查找return get_char(n - 1, k - mid)# 定义字符取反函数
def invert(c):return 'B' if c == 'R' else 'R'def main():# 读取所有输入input = sys.stdin.read().split()# 第一个数字是测试用例数量TT = int(input[0])# 初始化指针ptr = 1for _ in range(T):# 读取n和kn = int(input[ptr])k = int(input[ptr + 1])ptr += 2# 获取第n个字符串的第k个字符result = get_char(n, k)# 根据字符输出对应的颜色if result == 'R':print("red")else:print("blue")if __name__ == "__main__":main()

七、JavaScript算法源码

// 使用标准输入输出模块
const readline = require('readline');// 创建接口用于读取输入
const rl = readline.createInterface({input: process.stdin,output: process.stdout,terminal: false
});// 定义递归函数,用于获取第n个字符串的第k个字符
function getChar(n, k) {// 基准情况:n=1时,返回'R'if (n === 1) {return 'R';}// 计算前一个字符串的长度,即2^(n-2)const mid = 1 << (n - 2);if (k < mid) {// 如果k在前半部分,取反后递归查找const c = getChar(n - 1, k);return invert(c); // 取反} else {// 如果k在后半部分,直接递归查找return getChar(n - 1, k - mid);}
}// 定义字符取反函数
function invert(c) {return (c === 'R') ? 'B' : 'R';
}// 读取所有输入数据
let input = [];
rl.on('line', function(line){input = input.concat(line.trim().split(' '));
});rl.on('close', function(){// 第一个数字是测试用例数量Tlet T = parseInt(input[0]);let ptr = 1;for(let i = 0; i < T; i++){// 读取n和klet n = parseInt(input[ptr]);let k = BigInt(input[ptr + 1]); // 使用BigInt处理大数ptr += 2;// 获取第n个字符串的第k个字符let result = getChar(n, Number(k));// 根据字符输出对应的颜色if(result === 'R'){console.log("red");}else{console.log("blue");}}
});

八、C算法源码

#include <stdio.h>// 定义字符取反函数
char invert_char(char c) {return (c == 'R') ? 'B' : 'R';
}// 定义递归函数,用于获取第n个字符串的第k个字符
char get_char(int n, unsigned long long k) {// 基准情况:n=1时,返回'R'if (n == 1) {return 'R';}// 计算前一个字符串的长度,即2^(n-2)unsigned long long mid = 1ULL << (n - 2);if (k < mid) {// 如果k在前半部分,取反后递归查找char c = get_char(n - 1, k);return invert_char(c); // 取反}else {// 如果k在后半部分,直接递归查找return get_char(n - 1, k - mid);}
}int main() {int T;// 读取测试用例数量scanf("%d", &T);while(T--){int n;unsigned long long k;// 读取n和kscanf("%d %llu", &n, &k);// 获取第n个字符串的第k个字符char result = get_char(n, k);// 根据字符输出对应的颜色if(result == 'R') {printf("red\n");}else {printf("blue\n");}}return 0;
}

九、C++算法源码

#include <bits/stdc++.h>
using namespace std;// 定义字符取反函数
char invert_char(char c) {return (c == 'R') ? 'B' : 'R';
}// 定义递归函数,用于获取第n个字符串的第k个字符
char get_char(int n, unsigned long long k) {// 基准情况:n=1时,返回'R'if (n == 1) {return 'R';}// 计算前一个字符串的长度,即2^(n-2)unsigned long long mid = 1ULL << (n - 2);if (k < mid) {// 如果k在前半部分,取反后递归查找char c = get_char(n - 1, k);return invert_char(c); // 取反}else {// 如果k在后半部分,直接递归查找return get_char(n - 1, k - mid);}
}int main(){ios::sync_with_stdio(false);cin.tie(0);int T;// 读取测试用例数量cin >> T;while(T--){int n;unsigned long long k;// 读取n和kcin >> n >> k;// 获取第n个字符串的第k个字符char result = get_char(n, k);// 根据字符输出对应的颜色if(result == 'R') {cout << "red\n";}else {cout << "blue\n";}}return 0;
}

🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1550310.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

kubernetes基础配置(入门操作)

资源管理 一、资源管理方式 1.命令式对象管理&#xff1a;直接使用命令去操作kubernetes资源 [rootmaster ~]# kubectl run nginx-pod --imagenginx --port80 kubectl run --generatordeployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubect…

煤矿厂智能化可视化:提升安全与效率

运用图扑可视化技术对煤矿厂进行实时监控与数据分析&#xff0c;提高安全管理水平和生产效率。

Java8/9/10/11新特性

目录 一、 Lambda表达式二、函数式(Functional)接口三、方法引用与构造器引用3.1、方法引用3.2 构造器引用和数组引用3.2.1 构造器引用3.2.2 数组引用 四、 强大的Stream API4.1 Stream API说明4.2 Stream 的操作三个步骤4.3 创建 Stream方式4.4 、Stream 的中间操作4.4.1 筛选…

VMware Tools安装——VMware Tools是灰色的,不能安装, (不带图形化界面的虚拟机,只有命令行的模式!!!)

问题 VMware Workstation 中“ 安装VMware Tools”是灰色的&#xff0c;无法点击安装 解决 1.挂载镜像文件 打开 VMware&#xff0c;点击虚拟机设置>>CD/DVD&#xff0c;选择“使用ISO映像文件”&#xff0c;点击“浏览” 再选择 VMware 安装目录中的 linux.iso 文件&a…

FPGA到底要怎么学?一篇文章直接让你搞清楚!!!

学好FPGA&#xff08;现场可编程门阵列&#xff09;涉及理论学习和实践操作的结合。以下是学习FPGA的基本流程和建议&#xff1a; 关注我&#xff0c;我会更新更多的知识&#xff0c;这会给你很多的帮助。 1. 理论基础 数字逻辑&#xff1a;了解基本的逻辑门、组合逻辑、时序…

JS对不同浏览器的检测问题

Navigator对象也称浏览器对象&#xff0c;该对象包含了浏览器的整体信息&#xff0c;如浏览器名称&#xff0c;版本号等。Navigator对象由Navigator浏览器率先使用&#xff0c;后来各方浏览器都开始支持Navigator对象&#xff0c;逐步成为一种标准。 一、Navigator对象的属性 …

HttpClientHandler 详解及使用

在现代网络编程中&#xff0c;HttpClientHandler 是一个至关重要的组件&#xff0c;它提供了对 HTTP 请求的底层配置和控制。本文将详细介绍 HttpClientHandler 的核心概念、配置选项以及如何在实际应用中使用它。 1. 什么是 HttpClientHandler&#xff1f; HttpClientHandle…

mongodb光速上手

开始 mongodb是一种nosql数据库&#xff0c;即非关系型数据库。 安装好后将bin目录添加到环境变量。 安装studio-3t&#xff0c;这是可视化编辑器。 启动 mongo --host localhost --port 27017 指令 查看所有库 show dbs 使用或创建并使用库 use school use 数据库名 向…

引入 LangChain4j 来简化 LLM 与 Java 应用程序的集成

作者&#xff1a;来自 Elastic David Pilato LangChain4j 框架于 2023 年创建&#xff0c;其目标如下&#xff1a; LangChain4j 的目标是简化将 LLM 集成到 Java 应用程序的过程。 LangChain4j 提供了一种标准方法&#xff1a; 根据给定内容&#xff08;例如文本&#xff09;创…

【Lcode 随笔】C语言版看了不后悔系列持续更新中。。。

文章目录 题目一&#xff1a;爬楼梯问题描述&#xff1a;题目分析&#xff1a;解题思路&#xff1a;示例代码&#xff1a;深入剖析&#xff1a; 题目二&#xff1a;打家劫舍问题描述&#xff1a;题目分析&#xff1a;解题思路&#xff1a;示例代码&#xff1a;深入剖析&#xf…

什么是数字化转型?数字化转型对企业有哪些优势?

一、什么是数字化转型&#xff1f; 定义&#xff1a; 数字化转型是指企业或组织将传统业务转化为数字化业务&#xff0c;利用人工智能、大数据、云计算、区块链、5G等数字技术提升业务效率和质量的过程。通俗来说&#xff0c;就是将数字技术应用到企业的各个方面&#xff0c;…

【C语言软开面经】

C语言软开面经 malloc calloc realloc free动态分配内存malloccalloc函数&#xff1a;realloc 函数&#xff1a;free函数&#xff1a; 堆栈-内存分区栈区&#xff08;Stack&#xff09;&#xff1a;堆区&#xff08;Heap&#xff09;&#xff1a;全局&#xff08;静态&#xff…

windows下安装rabbitMQ并开通管理界面和允许远程访问

如题&#xff0c;在windows下安装一个rabbitMQ server&#xff1b;然后用浏览器访问其管理界面&#xff1b;由于rabbitMQ的默认账号guest默认只能本机访问&#xff0c;因此需要设置允许其他机器远程访问。这跟mysql的思路很像&#xff0c;默认只能本地访问&#xff0c;要远程访…

【C++前缀和 动态规划 博弈】1140. 石子游戏 II|2034

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 C动态规划 博弈&#xff1a;往往后续状态已知&#xff0c;前续状态未知 LeetCode1140. 石子游戏 II Alice 和 Bob 继续他们的石子游戏。许多堆石子 排成一行&#xf…

android SELinux权限适配

抓log方法&#xff0c; setenforce 0, 如果不先将selinux设置为permission mode&#xff0c;会导致一个问题。 程序运行的时候遇到权限策略限制&#xff08;假设 sepolicy 1&#xff09;&#xff0c;程序运行失败。添加权限&#xff08;sepolicy 1&#xff09;&#xff0c;然后…

如何将音频转换成mp3?5个宝藏音频转换的方法,学起来!

音频文件已成为我们日常生活中不可或缺的一部分&#xff0c;无论是聆听喜爱的音乐、学习语言课程&#xff0c;还是录制会议内容&#xff0c;音频都扮演着重要角色。然而&#xff0c;随着音频格式的多样化&#xff0c;我们常常会遇到格式不兼容的问题&#xff0c;尤其是在需要将…

【完-网络安全】Windows注册表

文章目录 注册表启动项及常见作用五个根节点常见入侵方式 注册表 注册表在windows系统的配置和控制方面扮演了一个非常关键的角色&#xff0c;它既是系统全局设置的存储仓库&#xff0c;也是每个用户的设置信息的存储仓库。 启动项及常见作用 快捷键 WinR打开运行窗口&#x…

大模型增量训练--基于transformer制作一个大模型聊天机器人

针对夸夸闲聊数据集&#xff0c;利用UniLM模型进行模型训练及测试&#xff0c;更深入地了解预训练语言模型的使用方法&#xff0c;完成一个生成式闲聊机器人任务。 项目主要结构如下&#xff1a; data 存放数据的文件夹 dirty_word.txt 敏感词数据douban_kuakua_qa.txt 原始语…

ubuntu18.04安装教程

window分区 制作启动盘 插入 按F12进入启动选项页面&#xff0c;选择usb启动 选择install ubuntu 进入安装页面 选择中文&#xff08;简体&#xff09; 键盘布局选择英语&#xff08;美国&#xff09; 选择正常安装 等一小会儿 选择其他选项 分区 包括500mb系统分区 1000…

HuggingChat macOS版正式发布!文章内附体验地址!我国打造糖尿病专用AI模型|AI日报

文章推荐 全新豆包AI视频模型发布&#xff01;实测下的可灵与豆包&#xff01;原来它们的差距不止一点点... 今日热点 我国团队打造糖尿病专用AI模型 上海交通大学清源研究院MIFA实验室携手复旦大学附属中山医院内分泌科&#xff0c;组建专家团队&#xff0c;联手开发一款名…