【秋招笔试】8.18科大讯飞秋招-三语言题解
🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试
💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导
✨ 本系列打算持续跟新
春秋招笔试题
👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸
✨ 笔试合集传送们 -> 🧷春秋招笔试合集
🍒 本专栏已收集
60+
套笔试题,笔试真题
会在第一时间跟新🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力 💞!
🌰 科大讯飞莱拉!!
1️⃣ 打卡题,简单的模拟
2️⃣ 很基础的栈模拟题,比较简单
3️⃣ 平时做题不仔细看数据范围的小伙伴有福了!!数据范围看起来需要线性或者log的做法,但仔细分析之后发现是个诈骗题
xx: 没啥思路打个暴力骗个分吧,哎,我靠,怎么 AC了
🍈 01.花园装饰
问题描述
K小姐是一位园艺爱好者,她想要在自己的花园里创造一个独特的装饰。她决定用花盆摆出一个倒立的三角形图案。K小姐有很多相同的花盆,每个花盆上都刻有一个数字。她想知道,如果给定一个数字N,她应该如何摆放花盆来创造这个倒立的三角形图案。
输入格式
输入一个正整数 ,表示花盆上刻的数字。
输出格式
输出一个由数字 组成的倒立三角形图案。每行末尾不应有多余的空格。
样例输入
5
样例输出
55555
5555
555
55
5
数据范围
题解
按照题意模拟输出
参考代码
- Python
# 读取输入的数字N
N = int(input())
# 外层循环控制行数,从N递减到1
for i in range(N, 0, -1):
# 内层循环在每行中重复打印N
# 使用字符串乘法来重复数字N
print(str(N) * i)
- Java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 创建Scanner对象读取输入
Scanner scanner = new Scanner(System.in);
// 读取输入的数字N
int N = scanner.nextInt();
// 外层循环控制行数,从N递减到1
for (int i = N; i > 0; i--) {
// 使用StringBuilder来高效构建字符串
StringBuilder line = new StringBuilder();
// 内层循环在每行中重复添加N
for (int j = 0; j < i; j++) {
line.append(N);
}
// 打印当前行
System.out.println(line);
}
// 关闭Scanner
scanner.close();
}
}
- Cpp
#include <iostream>
#include <string>
using namespace std;
int main() {
int N;
// 读取输入的数字N
cin >> N;
// 将N转换为字符串,方便后续使用
string num = to_string(N);
// 外层循环控制行数,从N递减到1
for (int i = N; i > 0; i--) {
// 使用string的repeat方法重复N字符i次
cout << string(i, num[0]) << endl;
}
return 0;
}
🚀 02.数字合并的魔法
问题描述
在一个神秘的魔法世界中,K小姐正在进行一项有趣的实验。她有一个空的魔法栈,每次她施法都会向栈中加入一个数字。每当栈顶有两个相同的数字时,它们会合并成一个更高的数字,具体规则是:两个连续的相同数字 会合并为 。K小姐想知道经过 次施法后,栈中剩下的数字是什么。
输入格式
第一行包含一个整数 ,表示施法的次数。
第二行包含 个正整数,表示每次施法时加入的数字。
输出格式
输出一行数字,表示施法结束后栈中剩下的数字(自栈底至栈顶)。
样例输入
6
1 1 2 3 4 5
样例输出
6
数据范围
,施法加入的数字为 中的整数。
题解
本题的核心思路是使用栈结构来处理数字的压入和合并。
每次施法时,将数字压入栈中,并检查栈顶是否有两个相同的数字。
如果有,则将这两个数字合并为一个更高的数字,重复此过程直到不再有相同数字。
算法的时间复杂度为 ,空间复杂度为 。
参考代码
- Python
# 导入所需的库
import sys
def magic_stack_operations(m, operations):
stack = [] # 初始化一个空栈
for x in operations:
stack.append(x) # 将数字压入栈中
# 检查栈顶是否有两个相同的数字
while len(stack) >= 2 and stack[-1] == stack[-2]:
# 取出栈顶的两个相同数字
val = stack.pop() # 弹出栈顶元素
stack.pop() # 再弹出一个相同的元素
stack.append(val + 1) # 将合并后的新数字压入栈中
return stack
# 主函数
if __name__ == "__main__":
m = int(input()) # 读取施法次数
operations = list(map(int, input().split())) # 读取施法操作
result = magic_stack_operations(m, operations) # 进行魔法栈操作
print(" ".join(map(str, result))) # 输出结果
- Java
import java.util.*;
public class MagicStack {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt(); // 读取施法次数
Stack<Integer> stack = new Stack<>(); // 初始化一个空栈
for (int i = 0; i < m; i++) {
int x = scanner.nextInt(); // 读取施法操作
stack.
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
这里收集了超全的刷题笔记,欢迎大家的订阅,会持续跟新的