科大讯飞笔试 科大讯飞笔试题 0802
笔试时间:2025年8月2日
往年笔试合集:
第一题
给定两个由可见字符和空格组成的字符串s和t,其中字符串t的长度为偶数. 请将t的后半部分嫁按到8的未尾,并输出嫁接后的8以及t 的前半部分。 本题字符串的字符集为 ASCIl 码在 32 到 126 之间的字符,即大小写字母、数字、标点符号和空格。
输入描述
第一行输入一个长度为n (1 ≤n≤ 100)的字符串,s1,s2,....sn。 第二行输入一个长度为 m (2 <= m <= 100)的字符串,t1,t2....tm。保证 m为偶数。 除此之外,保证8和t中只包含可见字符和空格。
输出描述
第一行输出嫁接后的字符串s。 第二行输出t的前半部分。
样例输入
kou
yukari
样例输出
kouari
yuk
参考题解
模拟题,直接按照题意进行字符串模拟即可。
C++:
#include <bits/stdc++.h>
using namespace std;
int main() {
string s, t;
cin >> s >> t;
int half = t.size() / 2;
cout << s + t.substr(half) << "\n";
cout << t.substr(0, half) << "\n";
return 0;
}
Java:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String t = sc.nextLine();
int half = t.length() / 2;
System.out.println(s + t.substring(half));
System.out.println(t.substring(0, half));
}
}
Python:
s = input() t = input() half = len(t) // 2 print(s + t[half:]) print(t[:half])
第二题
对于给定的长度为n,仅由字符串构成的数组{a1,a2...,an},每一个字符串都仅由小写字母构成。你需要将全部字符串按照任意顺字拼接成一整个字符串(但是不改变每个字符串内部的顺序),随后恰好珊除其中的一个字符, 请你输出所有可能的拼接结果中,字典序最小的结果。 【名词解释】 字符串的第一个字符开始逐个比较,直至发现第一个不同的位置,比较这个位置字符的字母表顺序,字母序较小的字符串字典序也较小;如果比较到其中一个字符串的结尾时依旧全部相同,则较短的字符串字典序更小。
输入描述
第一行输入一个整数n(1 <= n <= 8),表示数组的长度。
第二行输入n个字符串a1,a2,……,an (1 <= len(ai)<= 10),每个字符串仅由小写字母构成。
输出描述
输出一个字符串,表示所有可能的拼接结果中,字典序最小的结果。
样例输入
3
za ba bb
样例输出
ababb
参考题解
本题字符串贪心题目,由于数据量不大,因此可以直接全排列枚举即可。
C++:
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <climits>
using namespace std;
int main() {
int n;
cin >> n;
// 读取输入字符串
vector<string> arr(n);
for (int i = 0; i < n; ++i) {
cin >> arr[i];
}
// 排序以确保next_permutation能生成所有排列
sort(arr.begin(), arr.end());
string best = "";
do {
// 拼接当前排列成一个字符串
string s;
for (const string& part : arr) {
s += part;
}
int idx = s.length() - 1;
for (int i = 0; i < (int)s.length() - 1; ++i) {
if (s[i] > s[i+1]) {
idx = i;
break;
}
}
// 删除找到的位置的字符
string t = s.substr(0, idx) + s.substr(idx + 1);
// 更新最优解
if (best=="") {
best = t;
} elseif (t < best) {
best = t;
}
} while (next_permutation(arr.begin(), arr.end()));
cout << best << endl;
return 0;
}
Java:
import java.util.*;
public class Main {
static String best = null;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] arr = new String[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.next();
}
Arrays.sort(arr);
permute(arr, 0);
System.out.println(best);
}
static void permute(String[] arr, int l) {
if (l == arr.length) {
StringBuilder sb = new StringBuilder();
for (String s : arr) sb.append(s);
String s = sb.toString();
int idx = s.length() - 1;
for (int i = 0; i < s.length() - 1; i++) {
if (s.charAt(i) > s.charAt(i + 1)) {
idx = i;
break;
}
}
String t = s.substring(0, idx) + s.substring(idx + 1);
if (best == null || t.compareTo(best) < 0) {
best = t;
}
return;
}
for (int i = l; i < arr.length; i++) {
swap(arr, i, l);
permute(arr, l + 1);
swap(arr, i, l);
}
}
static void swap(String[] arr, int i, int j) {
String tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
Python:
import itertools
n = int(input())
arr = [input().strip() for _ in range(n)]
arr.sort()
best = None
for perm in itertools.permutations(arr):
s = "".join(perm)
idx = len(s) - 1
for i in range(len(s) - 1):
if s[i] > s[i + 1]:
idx = i
break
t = s[:idx] + s[idx + 1:]
if best is None or t < best:
best = t
print(best)
第三题
现在需要在坐标平面上以某一点 C 为圆心画一个圆,且该圆心必须位于坐标轴上。 请你找到一个最小的半径r,使得这圆能够覆盖
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南
顺丰集团工作强度 374人发布