【秋招笔试】24-07-20-科大讯飞提前批-研发岗笔试题
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员
💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导
✨ 本系列打算持续跟新 秋招笔试题
👏 感谢大家的订阅➕ 和 喜欢💗
本场题目难度不大,第一题是 签到题,第二题 找规律,第三题可以 猜结论
🫐 01.LYA的咖啡店
问题描述
LYA开了一家深受欢迎的咖啡店。由于店铺规模有限,顾客需要排队等候。每位顾客的点单和制作时间不同,范围在 分钟之间。LYA想知道,作为第
位顾客,预计期望需要等待多长时间才能拿到自己的咖啡。
输入格式
输入一行,包含三个整数 、
和
,分别表示顾客的位置、最短制作时间和最长制作时间。
输出格式
输出一个浮点数,表示预期等待时间。结果四舍五入保留到小数点后一位。
样例输入1
2 1 5
样例输出1
3.0
样例1说明
LYA是第 2 位顾客,前面只有 1 位顾客,该顾客的制作时间在 之间,平均等待时间为 3 分钟。
样例输入2
5 1 1
样例输出2
4.0
样例2说明
LYA是第 5 位顾客,前面有 4 位顾客,每位顾客的制作时间都是 1 分钟,需要等待 4 分钟。
样例输入3
5 1 2
样例输出3
6.0
样例3说明
LYA是第 5 位顾客,前面有 4 位顾客,每位顾客的制作时间在 之间,期望等待时间是
分钟。
样例输入4
6 1 2
样例输出4
7.5
样例4说明
LYA是第 6 位顾客,前面有 5 位顾客,每位顾客的制作时间在 之间,期望等待时间是
分钟。
数据范围
,
题解
这个问题可以通过计算期望值来解决。每位顾客的制作时间在 之间均匀分布,因此平均制作时间为
。
LYA作为第 位顾客,需要等待前
位顾客的制作完成。因此,总的期望等待时间为:
计算出这个值并保留一位小数即为答案。
参考代码
- Python
n, x, y = map(int, input().split())
wait_time = (n - 1) * (x + y) / 2
print(f"{wait_time:.1f}")
- Java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
int x = sc.nextInt();
int y = sc.nextInt();
double waitTime = (n - 1) * (x + y) / 2.0;
System.out.printf("%.1f\n", waitTime);
}
}
- Cpp
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
long long n;
int x, y;
cin >> n >> x >> y;
double wait_time = (n - 1) * (x + y) / 2.0;
cout << fixed << setprecision(1) << wait_time << endl;
return 0;
}
🎧 02.LYA的珠宝展示顺序
问题描述
LYA是一位珠宝设计师,她正在准备一场珠宝展。她有一系列独特的珠宝作品,每件都有其独特的价值。为了让展览更有趣,LYA决定按照特殊的顺序展示她的作品。她想按照以下规则来决定展示顺序:
- 首先选择价值居中的作品(如果作品数量为奇数)或两个中间价值的作品中较小的一个(如果作品数量为偶数)。
- 展示选中的作品,并将其从列表中移除。
- 重复步骤1和2,直到所有作品都被展示。
LYA想知道按照这个规则,她的珠宝作品会以什么顺序被展示。
输入格式
第一行包含一个正整数 (
),表示珠宝作品的数量。 第二行包含
个正整数
(
),表示每件珠宝作品的价值。
输出格式
输出一行,包含 个整数,表示珠宝作品展示的顺序。
样例输入
4
1 9 8 5
样例输出
5 8 1 9
样例说明
首先选择5(两个中间值中较小的一个),然后是8,接着是1,最后是9。
数据范围
题解
找规律+模拟。
- 首先对输入的价值序列进行排序。
- 使用两个指针,一个指向序列中间(偶数长度时指向中间偏左),另一个指向中间偏右。
- 交替输出左指针和右指针指向的元素,并向两端移动指针。
这种方法能够保证每次都选择当前剩余元素中的中位数或两个中间值中较小的一个。
时间复杂度:排序需要 ,输出需要
,总体时间复杂度为
。 空间复杂度:
,用于存储排序后的序列。
参考代码
- Python
n = int(input())
a = list(map(int, input().split()))
a.sort()
l, r = (n-1)//2, n//2
result = []
while l >= 0 and r < n:
if l == r:
result.append(a[l])
else:
resu
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
这里收集了超全的互联网春秋招笔试题,欢迎大家的订阅,会持续跟新的