【OPPO笔试题汇总】2024-05-12-OPPO春招笔试题-三语言题解(CPP/Python/Java)

2024-05-14 20:04

本文主要是介绍【OPPO笔试题汇总】2024-05-12-OPPO春招笔试题-三语言题解(CPP/Python/Java),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新OPPO近期的春秋招笔试题汇总~

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📧 清隆这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 清隆领取,会在飞书进行同步的跟新。

文章目录

    • ⌚️ 01.K小姐的密码生成
      • 题目描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🖱 02.历练之路
      • 题目描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🎚 03.寻找神秘信号
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 写在最后
    • 📧 清隆这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 清隆领取,会在飞书进行同步的跟新。

⌚️ 01.K小姐的密码生成

题目描述

K小姐在一家网络安全公司工作,最近她接到一个任务,要为公司的系统设计一套密码生成规则。

公司的系统有两套预置的字符串 S S S T T T,每次生成密码时,都会从这两个字符串中挑选字符。具体来说,对于密码的每一位,可以从 S S S T T T 相同位置的字符中任意选择一个。

现在,K小姐已经想好了理想的目标密码 P P P,她想知道能否通过上述规则生成出这个密码。

输入格式

第一行包含一个正整数 n n n,表示字符串 S S S T T T P P P 的长度。

第二行包含一个长度为 n n n 的字符串 S S S

第三行包含一个长度为 n n n 的字符串 T T T

第四行包含一个长度为 n n n 的字符串 P P P

输出格式

如果可以生成出目标密码 P P P,输出 Yes,否则输出 No

样例输入

3
abc
bad
aac

样例输出

Yes

数据范围

1 ≤ n ≤ 100 1 \le n \le 100 1n100

题解

可以遍历目标密码 P P P 的每一位,检查它是否能够从 S S S T T T 的对应位置取得。如果 P P P 的每一位都能取到,那么就可以生成出目标密码;否则,无法生成目标密码。

时间复杂度为 O ( n ) O(n) O(n),空间复杂度为 O ( 1 ) O(1) O(1)

参考代码

  • Python
n = int(input())
s = input()
t = input()
p = input()for i in range(n):if p[i] != s[i] and p[i] != t[i]:print("No")exit()print("Yes")
  • Java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();String s = sc.next();String t = sc.next();String p = sc.next();for (int i = 0; i < n; i++) {if (p.charAt(i) != s.charAt(i) && p.charAt(i) != t.charAt(i)) {System.out.println("No");return;}}System.out.println("Yes");}
}
  • Cpp
#include <iostream>
#include <string>
using namespace std;int main() {int n;string s, t, p;cin >> n >> s >> t >> p;for (int i = 0; i < n; i++) {if (p[i] != s[i] && p[i] != t[i]) {cout << "No" << endl;return 0;}}cout << "Yes" << endl;return 0;
}

🖱 02.历练之路

题目描述

LYA 正在玩一款角色扮演游戏。在游戏中,他需要操控角色在 n n n 个关卡中战斗,每个关卡都有一个 boss。

游戏的战斗机制如下:

  1. 每个回合 LYA 先手攻击 boss,然后 boss 会反击。
  2. 如果 LYA 在该回合成功闪避,则不会受到 boss 的伤害。
  3. LYA 造成的伤害为 a + b × c a + b \times c a+b×c,其中 a a a 为基础攻击力, b b b 为连击加成,而 c c c 为连击数。
  4. 每次攻击后,LYA 的连击数 c c c 会加 1 1 1,但当 LYA 受到 boss 的攻击时,连击数会重置为 0 0 0

LYA 想知道,在通过这 n n n 个关卡后,他总共对 boss 们造成了多少伤害。

输入格式

第一行输入三个正整数 n , a , b n, a, b n,a,b,分别代表关卡数,LYA 的基础攻击力和连击加成。

第二行输入一个长度为 n n n 的字符串,字符串仅由 ox 组成,其中 o 代表本回合闪避成功,x 代表本回合闪避失败。

输出格式

一个正整数,代表 LYA 造成的总伤害。

样例输入

3 5 2
oxo

样例输出

17

数据范围

1 ≤ n , a , b ≤ 1 0 5 1 \leq n, a, b \leq 10^5 1n,a,b105

题解

我们可以模拟整个战斗过程。用变量 c c c 记录当前的连击数,用变量 r e s res res 记录总伤害。

对于每一回合:

  1. 先将 LYA 造成的伤害 a + b × c a + b \times c a+b×c 累加到 r e s res res 上。
  2. 如果本回合闪避失败(即字符为 x),则将连击数 c c c 重置为 0 0 0;否则,将连击数 c c c 1 1 1

最终,变量 r e s res res 的值即为 LYA 造成的总伤害。

时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( 1 ) O(1) O(1)

参考代码

  • Python
n, a, b = map(int, input().split())
s = input()c = res = 0
for ch in s:res += a + b * cif ch == 'x':c = 0else:c += 1print(res)
  • Java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();long a = sc.nextLong();long b = sc.nextLong();String s = sc.next();long c = 0, res = 0;for (int i = 0; i < n; i++) {res += a + c * b;if (s.charAt(i) == 'x') {c = 0;} else {c++;}}System.out.println(res);}
}
  • Cpp
#include <iostream>
using namespace std;int main() {int n;long long a, b;string s;cin >> n >> a >> b >> s;long long c = 0, res = 0;for (char ch : s) {res += a + c * b;if (ch == 'x') {c = 0;} else {c++;}}cout << res << endl;return 0;
}

🎚 03.寻找神秘信号

问题描述

K小姐在一次偶然的机会中,获得了一串神秘的数字信号。这些信号隐藏着一个秘密,只有当选取的连续信号段中所有数字的乘积在二进制表示下末尾至少有 k k k 个零时,才能解锁。K小姐希望找到满足条件的最短信号段,以尽快揭开秘密。

输入格式

第一行包含两个正整数 n n n k k k,分别表示信号的长度和乘积二进制表示末尾至少需要的零的个数。
第二行包含 n n n 个正整数,表示这串神秘的数字信号。

输出格式

输出一个整数,代表满足条件的最短信号段的长度。如果不存在这样的信号段,输出 − 1 -1 1

样例输入

6 3
1 2 3 4 5 6

样例输出

3

数据范围

1 < n , k < 1 0 5 1 < n, k < 10^5 1<n,k<105
1 < a i < 1 0 9 1 < a_i < 10^9 1<ai<109

题解

为了找到满足条件的最短信号段,可以利用滑动窗口的方法。首先,将每个数字转换为其包含的 2 2 2 的因子个数,因为只有 2 2 2 的因子个数会影响乘积的二进制表示末尾零的个数。然后,通过滑动窗口来累加这些因子个数,直到累加和达到或超过 k k k,此时尝试缩小窗口以寻找最短的满足条件的信号段。

参考代码

  • Java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int k = scanner.nextInt();int[] signals = new int[n];for (int i = 0; i < n; i++) {int signal = scanner.nextInt();int count = 0;while (signal % 2 == 0) {signal >>= 1;count++;}signals[i] = count;}int left = 0, sum = 0, minLength = Integer.MAX_VALUE;for (int right = 0; right < n; right++) {sum += signals[right];while (sum >= k) {minLength = Math.min(minLength, right - left + 1);sum -= signals[left++];}}System.out.println(minLength == Integer.MAX_VALUE ? -1 : minLength);}
}
  • Python
n, k = map(int, input().split())
signals = list(map(int, input().split()))for i in range(n):count = 0while signals[i] % 2 == 0:signals[i] //= 2count += 1signals[i] = countleft, sum, minLength = 0, 0, float('inf')
for right in range(n):sum += signals[right]while sum >= k:minLength = min(minLength, right - left + 1)sum -= signals[left]left += 1print(minLength if minLength != float('inf') else -1)
  • Cpp
#include <iostream>
#include <vector>
using namespace std;int main() {int n, k;cin >> n >> k;vector<int> signals(n);for (int i = 0; i < n; ++i) {cin >> signals[i];int count = 0;while (signals[i] % 2 == 0) {signals[i] /= 2;count++;}signals[i] = count;}int left = 0, sum = 0, minLength = 1e9;for (int right = 0; right < n; ++right) {sum += signals[right];while (sum >= k) {minLength = min(minLength, right - left + 1);sum -= signals[left++];}}cout << (minLength == 1e9 ? -1 : minLength) << endl;return 0;
}

写在最后

📧 清隆这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 清隆领取,会在飞书进行同步的跟新。

在这里插入图片描述
在这里插入图片描述

这篇关于【OPPO笔试题汇总】2024-05-12-OPPO春招笔试题-三语言题解(CPP/Python/Java)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/989719

相关文章

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编