科大讯飞笔试 科大讯飞笔试题 0802

笔试时间:2025年8月2日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题

给定两个由可见字符和空格组成的字符串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 春招笔试合集 文章被收录于专栏

2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务