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

news2024/11/30 6:52:59

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

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

💻 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 sys
    input = sys.stdin.read
    data = 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*imag
    if prod < min_prod:
        min_prod = prod
        ans = i

print(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'
        continue
    
    a += a
    if 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.coloradmin.cn/o/1667844.html

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

相关文章

repo跟git的关系

关于repo 大都讲的太复杂了,大多是从定义角度跟命令角度去讲解,其实从现实项目使用角度而言repo很好理解. 我们都知道git是用来管理项目的,多人开发过程中git功能很好用.现在我们知道一个项目会用一个git仓库去管理,项目的开发过程中会使用git创建分支之类的来更好的维护项目代…

正方形中的最多点数

代码实现&#xff1a; 方法一&#xff1a;遍历——超时 int maxPointsInsideSquare(int **points, int pointsSize, int *pointsColSize, char *s) {int a 0;int flag 1;int num, pre_num 0;while (flag) {num pre_num;pre_num 0;int hash[26] {0};for (int i 0; i <…

fastjson2使用

说明&#xff1a;fastjson2是一个性能极致并且简单易用的Java JSON库&#xff08;官方语&#xff09;&#xff0c;本文介绍在Spring Boot项目中如何使用fastjson2。 创建项目 首先&#xff0c;创建一个Maven项目&#xff0c;引入fastjson2依赖&#xff0c;如下&#xff1a; …

Windows使用cowaxess(goaccess)分析Nginx日志

原文网址&#xff1a;Windows使用cowaxess(goaccess)分析Nginx日志_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Windows安装cowaxess来分析Nginx的access.log日志的方法。 cowaxess是goaccess的Windows版本&#xff0c;cowaxess底层会调用goaccess。 GoAccess 是一个专门用来…

使用迭代器进行遍历时不能进行元素的任何修改

记录一下 使用迭代器进行遍历时不能进行元素的任何修改 ArrayList<String> list new ArrayList<>();list.add("一");list.add("二");list.add("光");list.add("华"); // 遍历器Iterator<String> iterator …

如何使用活字格批量导入照片到数据表

活字格是一款功能强大的电子表格软件&#xff0c;除了基本的表格计算功能之外&#xff0c;还提供了丰富的扩展功能&#xff0c;可以用来实现各种自动化操作。例如&#xff0c;我们可以使用活字格来批量导入照片到数据表中。 以下是具体的操作步骤&#xff1a; 在活字格工作表…

rust开发web服务器框架,github排名对比

Rocket Star最多的框架 github仓库地址&#xff1a;GitHub - rwf2/Rocket: A web framework for Rust. Rocket 是一个针对 Rust 的异步 Web 框架&#xff0c;重点关注可用性、安全性、可扩展性和速度。 Axum 异步运行时 githuh仓库地址&#xff1a;GitHub - tokio-rs/axum: …

C++入门系列-拷贝构造函数

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 拷贝构造函数 概念 在创建对象的时候&#xff0c;能不能创建一个和已知已存在的对象一模一样的对象呢&#xff1f; 拷贝构造函数&#xff1a;只有单个形参&#xff0c;该形参…

飞书API(8):MySQL 入库定制版本

一、引入 通用版能解决百分之八九十的任务&#xff0c;剩下的部分任务需要进行定制。 先说明通用版本和定制版本有什么不同&#xff0c;通用版本就是只管大的数据类型&#xff0c;将数据处理为对应的类型入库&#xff0c;而定制版本会考虑局部列的数据类型&#xff0c;。举个…

Linux i2c工具——i2c_tools

1 简介 i2c-tools是一个用于处理I2C&#xff08;Inter-Integrated Circuit&#xff09;总线的工具集&#xff0c;它在Linux环境中广泛使用。这个工具集包含了一系列命令行工具&#xff0c;用于在I2C总线上执行各种操作&#xff0c;例如扫描设备、读取/写入寄存器、检测设备等。…

Copilot for Microsoft 365 扩充新增 16 种语言

最近&#xff0c;微软公司发布公告&#xff0c;进一步扩大 Copilot for Microsoft 365 语言支持&#xff0c;新增 16 种&#xff0c;支持的语言总数达到 25 种。 新支持的语言如下&#xff1a; 阿拉伯语 捷克语 丹麦语 荷兰语 芬兰语 希伯来语 匈牙利语 韩语 挪威语&am…

LLama3大模型本地部署 仅需6步完成对话模型本地安装部署。附赠ui配置、第三方微调模型、中文模型下载地址

本篇分为三部分 一&#xff1a;6步完成llama3大模型本地部署 二&#xff1a;8步完成llama3可视化对话界面安装 三&#xff1a;微调模型、中文模型下载资源分享 一、LLama3 大模型本地部署安装 首先去mata官网下载ollama客户端 Ollama 选择合适的操作系统平台后点击dowload按钮…

车规级低功耗汽车用晶振SG-9101CGA

车规级晶振SG-9101CGA属于爱普生9101系列&#xff0c;是一款可编程晶振。SG-9101CGA车规级晶振采用2.5x2.0mm封装&#xff0c;利用PLL技术生产&#xff0c;此款振荡器的频率范围从0.67M~170MHZ任一频点可选&#xff0c;步进1ppm&#xff0c;采用标准CMOS输出&#xff0c;最大输…

你知道C++多少——默认成员函数

&#x1f308;个人主页&#xff1a;小新_- &#x1f388;个人座右铭&#xff1a;“成功者不是从不失败的人&#xff0c;而是从不放弃的人&#xff01;”&#x1f388; &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f3c6;所属专栏&#xff1…

临时邮箱API发送邮件的安全性?如何保障?

临时邮箱API发送邮件的步骤有哪些&#xff1f;设置邮箱API方法&#xff1f; 电子邮件作为一种重要的通信方式&#xff0c;而临时邮箱API作为一种新兴的邮件发送技术&#xff0c;其安全性更是成为大家关注的焦点。那么&#xff0c;临时邮箱API发送邮件的安全性究竟如何呢&#…

本地vite启动的vue项目使用nginx代理

前提&#xff1a; 必须在同一网段或者相同的局域网&#xff01;&#xff01;&#xff01; nginx下载通道&#xff1a; https://nginx.org/en/download.html 步骤&#xff1a; 1、最好下载稳定版本&#xff1a; 2、下载后直接解压&#xff08;注意&#xff1a;解压后不要放…

【代码随想录37期】 第一周总结

周末再写一遍 【代码随想录37期】Day01 二分查找 移除元素 【代码随想录37期】Day02 有序数组的平方、长度最小的子数组、螺旋矩阵Ⅱ 【代码随想录37期】Day03 移除链表元素、设计链表、反转链表 【代码随想录37期】Day04 两两交换链表中的节点、删除链表的倒数第N个节点、链…

Baidu Comate智能编码助手:AI编程时代提升效率的好帮手

目录 写在前面一、如何安装二、如何使用场景需求体验步骤 三、AI 编程实战指令功能插件功能知识库功能 四、问题建议五、体验总结&#x1f680;写在最后 写在前面 Baidu Comate 是基于文心大模型的 AI编程工具&#xff0c;它结合百度积累多年的编程现场大数据和外部优秀开源数据…

JavaWeb文件上传/下载(Servlet)

效果 文件下载 文件上传 项目概述 Jakarta EE9&#xff0c;Web项目 项目文件结构 0 maven依赖&#xff0c;资源文件 <!-- lombok插件--> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId&g…

proteus示波器不弹出来

运行后示波器没有弹出来 点击调试&#xff08;Debug&#xff09;在点击Digital Oscilloscope 完成