科大讯飞笔试 科大讯飞秋招 科大讯飞笔试题 0927
笔试时间:2025年9月27日
往年笔试合集:
第一题:小红的红色数组
小红拿到了一个长度为 n 的整数数组(下标从 1 开始)。她将其中 k 个元素染成了红色,染红元素的下标依次为 b₁,b₂,...,bₖ,保证两两不同。
小红想知道:所有未被染成红色的元素之和等于多少?
输入描述
输出描述
输出一个整数,表示所有未被染红元素的和。
样例输入
3 1
1 2 3
1
样例输出
5
样例说明1
在此样例中,第1个元素被染红,未染红元素为 a₂ = 2,a₃ = 3,因此答案为 2 + 3 = 5。
参考题解
解题思路:
读取数组后直接计算总和,读取染红元素下标时,直接从总和中减去对应位置的元素值,最终剩下的就是未被染红元素的和。
C++:
#include <iostream> #include <vector> using namespace std; int main() { int n, k; cin >> n >> k; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } long long sum = 0; for (int i = 0; i < n; i++) { sum += a[i]; } for (int i = 0; i < k; i++) { int index; cin >> index; sum -= a[index - 1]; } cout << sum << endl; return 0; }
Java:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); int[] a = new int[n]; for (int i = 0; i < n; i++) { a[i] = sc.nextInt(); } long sum = 0; for (int i = 0; i < n; i++) { sum += a[i]; } for (int i = 0; i < k; i++) { int index = sc.nextInt(); sum -= a[index - 1]; } System.out.println(sum); sc.close(); } }
Python:
n, k = map(int, input().split()) a = list(map(int, input().split())) red_indices = list(map(int, input().split())) total_sum = sum(a) for index in red_indices: total_sum -= a[index - 1] print(total_sum)
第二题:举一反三
老师在黑板上写下了 a + b = c
考虑未知进制 x(2 ≤ x ≤ 10)。称当且仅当字符串 a,b,c,d,e 中的每个字符在进制 x 下均为合法数字(即每个字符代表的数值严格小于 x)时,进制 x 为一种合法选择。上述等式中的加法均在同一进制 x 下进行。
请在所有满足 2 ≤ x ≤ 10 的进制中,考虑所有同时满足「为合法选择」且「有 a + b = c 成立」的进制 x;对每个此类进制 x,将 d 与 e 分别按进制 x 解释为十进制整数并在十进制下求和;若所有此类进制得到的和完全相同,则输出该相同的值,否则输出baka。
输入描述
每个测试文件均包含多组测试数据。第一行输入一个整数 t (1 ≤ t ≤ 2 × 10⁵),表示测试数据组数;
此后 t 行,每行依次输入五个字符串 a,b,c,d,e,它们分别表示在同一未知进制 x 下的五个非负整数。字符串仅包含 '0' ~ '9'。
输出描述
对于每组测试数据,新起一行输出如下结果:
- 若不存在任何同时满足「为合法选择」且「有 a + b = c 成立」的进制 x,输出 baka;
- 否则,若对所有此类进制 x 所计算得到的 d + e 的十进制值完全相同,则输出该相同的值;
- 否则,输出 baka。
样例输入
2
10 10 20 11 0
1 1 2 2 2
样例输出
baka
4
样例说明
- 第一组中,字符串"10"、"10"和"20"在任意进制 x(x > 3) 下都满足 A + B = C,但此时 D + E 在不同进制下分别为 x + 1,结果不唯一,故输出 "baka";
- 第二组中,"1"+"1"="2"在任意进制 x(x ≥ 3) 下皆成立,且 "2"+"2"对应十进制值恒等于 4,结果唯一,故输出"4"。
参考题解
解题思路:
枚举每一种进制,然后逐位进行计算判断a+b是否等于c,如果等于将其放入到验证数组中,如果验证数组为空,输出baka。否则枚举验证数组中的每一种进制,计算d+e看其结果是否相同。
C++:
#include <bits/stdc++.h> using namespace std; using ll = long long; ll calc(const string& s, int y) { ll x = 0; for (char c : s) x = x * y + (c - '0'); return x; } int main() { ios::sync_with_stdio(0); cin.tie(0); int t; cin >> t; while (t--) { string a, b, c, d, e; cin >> a >> b >> c >> d >> e; string ss = a + b + c + d + e; int up = 0; for (char ch : ss) up = max(up, ch - '0'); set<ll> st; for (int x = max(2, up + 1); x <= 10; x++) { if (calc(a, x) + calc(b, x) == calc(c, x)) { st.insert(calc(d, x) + calc(e, x)); } } if (st.size() != 1) cout << "baka\n"; else cout << *st.begin() << "\n"; } return 0; }
Java:
import java.util.*; import java.io.*; public class Main { static long calc(String s, int base) { long x = 0; for (char c : s.toCharArray()) { x = x * base + (c - '0'); } return x; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt();
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南