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

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

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

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

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

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

文章目录

    • 📷 01.K小姐的字符串分类
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
      • 参考代码
    • 📸 02.弗洛伊德的游戏
      • 题目描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 📹 03.字符串的循环移位包含问题
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 写在最后
    • 📧 清隆这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 清隆领取,会在飞书进行同步的跟新。

📷 01.K小姐的字符串分类

问题描述

K小姐是一位热爱编程的软件工程师,她最近在处理一批字符串数据时遇到了一些问题。这些字符串包含了合法和非法字符,合法字符包括数字(0-9)、小写字母(a-z)和大写字母(A-Z)。K小姐需要你帮助她编写一个程序,将这些字符串分类为合法字符串和非法字符串,并去除重复的合法字符串。

输入格式

输入包含多行,每行一个字符串。字符串的总数不超过 100,每个字符串的长度不超过 64。

输出格式

第一行输出所有合法且无重复的字符串,字符串之间用一个空格分隔。第二行输出所有非法的字符串,可能包含重复,同样用一个空格分隔。

样例输入

abc
def
151 1
acd123
44234tjg
aga'.
ad--s
abd
123
abcdef
1234567890123456789012345678901234567890123456789012345678901234
EDFG
SDFG
ABC
DEF
CCCC
a*b=1

样例输出

abc def acd123 44234tjg abd 123 abcdef 1234567890123456789012345678901234567890123456789012345678901234 EDFG SDFG ABC DEF CCCC
aga' ad--s a*b=1

数据范围

  • 字符串数量不超过 100。
  • 每个字符串长度不超过 64。

题解

本题主要考察字符串处理和集合的使用。首先,我们需要判断每个字符串是否为合法字符串。合法字符串只包含数字和字母。我们可以通过遍历字符串中的每个字符,检查它是否为字母或数字来完成这一判断。对于合法的字符串,我们使用一个集合来存储,以便去除重复项。对于非法的字符串,我们直接存入另一个列表。最后,按照题目要求输出这两个列表。

参考代码

参考代码

  • Python
def process_strings():import sysinput = sys.stdin.readdata = input().splitlines()valid_set = set()valid_list = []invalid_list = []for s in data:if all(c.isalnum() for c in s):if s not in valid_set:valid_list.append(s)valid_set.add(s)else:invalid_list.append(s)print(" ".join(valid_list))print(" ".join(invalid_list))if __name__ == "__main__":process_strings()
  • Java
import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);Set<String> validSet = new HashSet<>();List<String> validList = new ArrayList<>();List<String> invalidList = new ArrayList<>();while (scanner.hasNextLine()) {String s = scanner.nextLine();boolean isValid = true;for (int i = 0; i < s.length(); i++) {char ch = s.charAt(i);if (!Character.isLetterOrDigit(ch)) {isValid = false;break;}}if (isValid) {if (!validSet.contains(s)) {validList.add(s);validSet.add(s);}} else {invalidList.add(s);}}for (int i = 0; i < validList.size(); i++) {if (i > 0) System.out.print(" ");System.out.print(validList.get(i));}System.out.println();for (int i = 0; i < invalidList.size(); i++) {if (i > 0) System.out.print(" ");System.out.print(invalidList.get(i));}System.out.println();scanner.close();}
}
  • Cpp
#include <iostream>
#include <set>
#include <vector>
#include <cctype>
using namespace std;int main() {set<string> validSet;vector<string> validList, invalidList;string s;while (cin >> s) {bool isValid = true;for (char ch : s) {if (!isalpha(ch) && !isdigit(ch)) {isValid = false;break;}}if (isValid) {if (validSet.find(s) == validSet.end()) {validList.push_back(s);validSet.insert(s);}} else {invalidList.push_back(s);}}for (int i = 0; i < validList.size(); i++) {if (i > 0) cout << " ";cout << validList[i];}cout << endl;for (int i = 0; i < invalidList.size(); i++) {if (i > 0) cout << " ";cout << invalidList[i];}cout << endl;return 0;
}

📸 02.弗洛伊德的游戏

题目描述

K小姐和A先生在玩一个有趣的游戏。游戏在一个 n × m n \times m n×m 的矩阵上进行,矩阵的每个元素都是一个复数。K小姐先写下一个 n × 2 n \times 2 n×2 的矩阵 U U U,每一行表示一个复数,第一列为实部,第二列为虚部。接下来轮到A先生,他需要写下 m m m n × 2 n \times 2 n×2 的矩阵 V 1 , V 2 , … , V m V_1, V_2, \ldots, V_m V1,V2,,Vm,每个矩阵的形式与 U U U 相同。

游戏的目标是找到一个与 U U U 的内积最小的矩阵 V i V_i Vi,其中内积的定义为:

⟨ U , V i ⟩ = ∑ j = 1 n ( U j 1 V i j 1 − U j 2 V i j 2 ) + i ( U j 1 V i j 2 + U j 2 V i j 1 ) \langle U, V_i \rangle = \sum\limits_{j=1}^n (U_{j1}V_{ij1} - U_{j2}V_{ij2}) + i(U_{j1}V_{ij2} + U_{j2}V_{ij1}) U,Vi=j=1n(Uj1Vij1Uj2Vij2)+i(Uj1Vij2+Uj2Vij1)

其中 i i i 为虚数单位, U j k U_{jk} Ujk 表示矩阵 U U U j j j 行第 k k k 列的元素, V i j k V_{ijk} Vijk 表示矩阵 V i V_i Vi j j j 行第 k k k 列的元素。

现在给定矩阵 U U U V 1 , V 2 , … , V m V_1, V_2, \ldots, V_m V1,V2,,Vm,请你帮助K小姐找到答案。

输入格式

第一行包含两个正整数 n , m n,m n,m,分别表示 U U U 的行数和 V V V 的个数。

接下来 n n n 行,每行包含两个实数,表示 U U U 中的一行。

接下来 m m m n × 2 n \times 2 n×2 的矩阵,每个矩阵的格式与 U U U 相同,表示 V 1 , V 2 , … , V m V_1, V_2, \ldots, V_m V1,V2,,Vm

输出格式

输出一个整数,表示答案矩阵 V i V_i Vi 的编号(从 0 0 0 开始编号)。

样例输入

2 3
1.0 0
0.9 -0.3
0.6 0.3
0.8 -0.1
0.5 0.2
0.3 -0.2
2 -0.6
0.5 -0.9
0.5 0.8
0 -0.6
0.9 -0.5
0.8 -0.9

样例输出

1

数据范围

1 ≤ n , m ≤ 1000 1 \leq n,m \leq 1000 1n,m1000
0 ≤ 0 \leq 0 矩阵元素的绝对值 ≤ 1000 \leq 1000 1000

题解

这道题可以直接暴力求解。我们枚举每一个矩阵 V i V_i Vi,计算其与 U U U 的内积,取内积最小的矩阵编号作为答案即可。

计算内积的时候,我们可以直接根据公式展开计算。设 U U U 的第 j j j 行为 ( a j , b j ) (a_j, b_j) (aj,bj) V i V_i Vi 的第 j j j 行为 ( c j , d j ) (c_j, d_j) (cj,dj),那么:

( a j + b j i ) ( c j + d j i ) = a j c j − b j d j + ( a j d j + b j c j ) i (a_j+b_ji)(c_j+d_ji)=a_jc_j-b_jd_j+(a_jd_j+b_jc_j)i (aj+bji)(cj+dji)=ajcjbjdj+(ajdj+bjcj)i

将所有的实部求和即为内积的实部,虚部求和即为内积的虚部。最后取复数模长的平方作为内积的大小。

时间复杂度 O ( n m ) O(nm) O(nm),空间复杂度 O ( n ) O(n) O(n)

参考代码

  • Python
n, m = map(int, input().split())
u = [list(map(float, input().split())) for _ in range(n)]ans = 0
min_prod = float("inf")
for i in range(m):v = [list(map(float, input().split())) for _ in range(n)]real = sum(u[j][0]*v[j][0] - u[j][1]*v[j][1] for j in range(n))imag = sum(u[j][0]*v[j][1] + u[j][1]*v[j][0] for j in range(n))prod = real*real + imag*imagif prod < min_prod:min_prod = prodans = iprint(ans)
  • Java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt(), m = sc.nextInt();double[][] u = new double[n][2];for (int i = 0; i < n; i++) {u[i][0] = sc.nextDouble();u[i][1] = sc.nextDouble();}int ans = 0;double minProd = Double.POSITIVE_INFINITY;for (int i = 0; i < m; i++) {double[][] v = new double[n][2];for (int j = 0; j < n; j++) {v[j][0] = sc.nextDouble();v[j][1] = sc.nextDouble();}double real = 0, imag = 0;for (int j = 0; j < n; j++) {real += u[j][0] * v[j][0] - u[j][1] * v[j][1];imag += u[j][0] * v[j][1] + u[j][1] * v[j][0];}double prod = real * real + imag * imag;if (prod < minProd) {minProd = prod;ans = i;}}System.out.println(ans);}
}
  • Cpp
#include <iostream>
#include <vector>
#include <array>
using namespace std;int main() {int n, m;cin >> n >> m;vector<array<double, 2>> u(n);for (int i = 0; i < n; i++) {cin >> u[i][0] >> u[i][1];}int ans = 0;double minProd = 1e18;for (int k = 0; k < m; k++) {vector<array<double, 2>> v(n);for (int i = 0; i < n; i++) {cin >> v[i][0] >> v[i][1];}double real = 0, imag = 0;for (int i = 0; i < n; i++) {real += u[i][0] * v[i][0] - u[i][1] * v[i][1];imag += u[i][0] * v[i][1] + u[i][1] * v[i][0];}double prod = real * real + imag * imag;if (prod < minProd) {minProd = prod;ans = k;}}cout << ans << endl;return 0;
}

📹 03.字符串的循环移位包含问题

问题描述

K小姐非常喜欢字符串游戏。最近,她发明了一种新的字符串操作方法:“循环移位”。

对于一个字符串,每执行一次"循环移位"操作,就会将字符串的第一个字符移动到最后一个字符的位置,其他字符的相对顺序保持不变。例如,对于字符串 A b c D AbcD AbcD,执行一次"循环移位"操作后,它将变成 b c D A bcDA bcDA。如果继续执行"循环移位"操作,字符串将依次变成 c D A b cDAb cDAb D A b c DAbc DAbc A b c D AbcD AbcD

现在,K小姐有两个字符串 S S S(源字符串)和 T T T(目标字符串)。她想知道,源字符串 S S S 经过若干次"循环移位"操作后,是否可以得到一个包含目标字符串 T T T 的字符串。

输入格式

输入共 6 6 6 行,包含三组测试数据,每组数据占两行。

对于每组测试数据:

  • 第一行为源字符串 S S S
  • 第二行为目标字符串 T T T

输出格式

输出共一行,包含三个数字,表示每组测试数据的答案。

对于每组测试数据:

  • 如果源字符串 S S S 经过若干次"循环移位"操作后,可以得到一个包含目标字符串 T T T 的字符串,则输出 1 1 1
  • 否则,输出 0 0 0

样例输入

AABCD
CDAA
AABCD
ABCD
AABCD
CFS

样例输出

110

数据范围

  • 字符串 S S S T T T 的长度均不超过 100 100 100
  • 字符串中只包含大写英文字母。

题解

本题可以通过字符串匹配的方法来解决。具体思路如下:

  1. 对于每组测试数据,首先判断目标字符串 T T T 的长度是否大于源字符串 S S S 的长度。如果大于,则源字符串 S S S 无论经过多少次"循环移位"操作,都无法得到一个包含目标字符串 T T T 的字符串,直接输出 0 0 0

  2. 如果目标字符串 T T T 的长度不大于源字符串 S S S 的长度,则将源字符串 S S S 复制一份,拼接在原字符串的后面,得到一个新的字符串 S ′ S' S

  3. 在新字符串 S ′ S' S 中查找目标字符串 T T T,如果能够找到,则说明源字符串 S S S 经过若干次"循环移位"操作后,可以得到一个包含目标字符串 T T T 的字符串,输出 1 1 1;否则,输出 0 0 0

时间复杂度: O ( n ) O(n) O(n),其中 n n n 为源字符串 S S S 的长度。
空间复杂度: O ( n ) O(n) O(n),需要额外的空间存储新字符串 S ′ S' S

参考代码

  • Python
n = 3
res = ''for i in range(n):a = input().strip()b = input().strip()if len(b) > len(a):res += '0'continuea += aif b in a:res += '1'else:res += '0'print(res)
  • Java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = 3;StringBuilder res = new StringBuilder();for (int i = 0; i < n; i++) {String a = sc.nextLine();String b = sc.nextLine();if (b.length() > a.length()) {res.append('0');continue;}a += a;if (a.contains(b)) {res.append('1');} else {res.append('0');}}System.out.println(res.toString());}
}
  • Cpp
#include <iostream>
#include <string>using namespace std;int main() {int n = 3;string res = "";for (int i = 0; i < n; i++) {string a, b;cin >> a >> b;if (b.size() > a.size()) {res += '0';continue;}a += a;if (a.find(b) != string::npos) {res += '1';} else {res += '0';}}cout << res << endl;return 0;
}

写在最后

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【漏洞复现】泛微OA E-Cology portalTsLogin文件读取漏洞

漏洞描述&#xff1a; 泛微E-Cology是一款面向中大型组织的数字化办公产品&#xff0c;它基于全新的设计理念和管理思想&#xff0c;旨在为中大型组织创建一个全新的高效协同办公环境。泛微OA E-Cology portalTsLogin存在任意文件读取漏洞&#xff0c;允许未经授权的用户读取服…

了解当前经济,VBA一键获取不同货币实时汇率

了解当前经济数据,VBA一键获取不同货币间实时汇率 当下较火的经济新闻:黄金价格、日元贬值、美元加息等,咱们不去分析了解这些经济变动背后的动机及原因,做一点本份的事,如何用VBA获取不同货币之间的实时汇率。这肯定是需要联网的,现从“外汇查询” 网站(https://www.wa…

UnitTest / pytest 框架

文章目录 一、UnitTest框架1. TestCase使用2. TestSuite 和 TestRunner3. TestLoader4. Fixture装置5. UnitTest断言1. 登录案例 6. 参数化1. parameterized插件 7. unitTest 跳过 二、pytest 框架1. 运行方式3.读取配置文件(常用方式) 2. pytest执行用例的顺序1. 分组执行(冒烟…

重学JavaScript核心知识点(二)—— 详解Js中的模块化

详解Js中的模块化 1. 模块化的背景2. 来看一个例子3. 优雅的做法 —— 创建模块对象4. 模块与类&#xff08;class&#xff09;5. 合并模块6. 动态加载模块 1. 模块化的背景 JavaScript 在诞生之初是体积很小的&#xff0c;早期&#xff0c;它们大多被用来执行独立的脚本任务&…

考研数学|强化阶段怎么刷《660》《880》《1000》?

强化阶段想要刷好题&#xff0c;首先要选一本适合自己的题集&#xff01; 一般在强化阶段&#xff0c;大家用多个最多的题集就是660题&#xff0c;880题还有1000题 660题的特点是只训练客观题&#xff0c;虽然题目的质量很高&#xff0c;但是训练面还是比较窄 880题是综合训…

云器Lakehouse:Multi-Cluster弹性架构如何实现湖上高并发低延迟分析

导读 在当今快速发展的大数据时代&#xff0c;数据平台的性能和效率对于企业来说至关重要。云器Lakehouse的Multi-Cluster弹性架构为我们提供了一种全新的视角&#xff0c;以应对数据湖上高并发和低延迟分析的挑战。本文将深入探讨云器Lakehouse如何通过其独特的技术理念和架构…

鸿蒙开发学习:初探【ArkUI-X】

ArkTS 是华为自研的开发语言。它在TypeScript&#xff08;简称TS&#xff09;的基础上&#xff0c;匹配 ArkUI 框架&#xff0c;扩展了声明式 UI 、状态管理等相应的能力&#xff0c;让开发者以更简洁、更自然的方式开发跨端应用。 ArkUI-X 进一步将 ArkUI 扩展到了多个 OS 平台…

线程同步--条件变量,信号量

生产者和消费者模型 案例 /*生产者消费者模型&#xff08;粗略的版本&#xff09; */ #include <stdio.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h>// 创建一个互斥量 pthread_mutex_t mutex;struct Node{int num;struct Node …

DELL T630服务器iDRAC分辨率调整办法

对于Dell T630服务器的iDRAC分辨率调整&#xff0c;您需要登录到iDRAC的Web界面。以下是详细的步骤&#xff1a; 登录iDRAC&#xff1a;在浏览器中输入iDRAC的IP地址&#xff0c;然后使用用户名&#xff08;通常是“root”&#xff09;和密码登录。 导航到虚拟控制台&#xff…

C++组合类

类的数据成员不但可以是基本类型&#xff0c;也可以是其它类的对象。 组合类就是指一个类包含其他类的对象作为该类的数据成员。 当组合类创建对象时&#xff0c;其中包含的各个数据成员对象应首先被创建。因此&#xff0c;在创建类的对象时&#xff0c;既要对本类的基本…

NumPy库与PyTorch库的异同点

目录 1.单位的创建和操作 1.创建 2.形状变换 2.数学和统计操作 1.矩阵乘法 2.广播 3.统计计算 3.GPU支持 4.在深度学习中的作用 5.应用范围 NumPy库为数组服务&#xff0c;PyTorch库为张量服务&#xff0c;这是最本质的区别。 1.单位的创建和操作 1.创建 NumPy:使…

长安汽车:基于云器 Lakehouse 的车联网大数据平台建设

近年来随着智能汽车行业的迅速发展&#xff0c;数据也在呈爆炸式增长。长安大数据平台承接了长安在生产上大部分流量应用及日常生产业务应用。本文将分享长安汽车在车联网场景下大数据平台建设面临的一些挑战和具体落地的实践。 主要内容如下&#xff1a; 1. 背景介绍 2. 长…

android图标底色问题,debug与release不一致

背景 在android 8&#xff08;sdk 26&#xff09;之前的版本&#xff0c;直接使用图片文件作为图标&#xff0c;开发时比较容易控制图标&#xff0c;但是不同的安卓定制版本就不容易统一图标风格了。 在android 8及之后的版本&#xff0c;图标对应的是ic_launcher.xml&#x…

【iOS】KVO

文章目录 前言一、KVO使用1.基本使用2.context使用3.移除KVO通知的必要性4.KVO观察可变数组 二、代码调试探索1.KVO对属性观察2.中间类3.中间类的方法3.dealloc中移除观察者后&#xff0c;isa指向是谁&#xff0c;以及中间类是否会销毁&#xff1f;总结 三、KVO本质GNUStep窥探…

基于51单片机的遥控开关仿真

基于51单片机的遥控开关设计 &#xff08;仿真&#xff0b;程序&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 本课题研究的是一款遥控开关&#xff0c;采用51单片机进行发射电路与接收电路的设计&#xff0c;发射电路由单片机最小系统及四个按键构成&am…

经典笔试题:快速排序 计数排序

Problem: 912. 排序数组 思路 &#x1f468;‍&#x1f3eb; 三叶题解 &#x1f496; AC&#xff1a;计数排序 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) class Solution {public int[] sortArray(int[] nums) {int max -50001, min 50001;for (…

【半个月我拿下了软考证】软件设计师高频考点--系统化教学-关系模式

&#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件设计师考点暴击 ⭐&#x1f170;️进入狂砍分⭐ ⭐软件设计师高频考点文档&#xff0c; ⭐软件设计师高频考点专栏 ⭐软件设计师高频考点⭐ &#x1f3b6;&#xff08;A) 考点1,关系模式 考点&#xff1a; 三个模式相…

【JVM基础篇】类加载器分类介绍

文章目录 类加载器什么是类加载器类加载器的作用是什么应用场景类加载器的分类启动类加载器用户扩展基础jar包 扩展类加载器和应用程序类加载器扩展类加载器通过扩展类加载器去加载用户jar包&#xff1a; 应用程序加载器 Arthas中类加载器相关功能 文章说明 类加载器 什么是类…

[C++核心编程-01]----C++内存四区详细解析

目录 前言 正文 01-内存区域简介 02-全局区 03-栈区 04-堆区 05-new操作符 总结 前言 当程序运行时&#xff0c;操作系统会为程序分配一块内存空间&#xff0c;这块内存空间被划分为不同的区域&#xff0c;每个区域有其独特的作用…

Unity图形图表XChart插件使用

最近做了一款数字孪生项目,其中涉及到了图形图表的应用,网上找了一下,找到了XChart插件,使用起来蛮方便的,不过还有待继续研究,很多细节性的知识点需要进行学习探索。以下是项目中的应用。 官方应用: ![](https://img-blog.csdnimg.cn/direct/ab9de8e84e7b4be4a50ea…