2023 携程笔试题 0329
笔试时间:2023年3月29日 春招实习
第一题
题目:数字的圆圈
游游拿到了一串数字,她想知道这串数字一共有多少个圆圈?
提示:数字0,6,9这三种数字各有一个圆圈,数字8共有两个圆圈。
输入描述
一个字符串,仅有数字字符组成。
长度不超过100000。
输出描述
该字符串包含的圆圈的数量。
样例输入
123457890
样例输出
4
参考题解
直接枚举计算就行了。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int main() {
string s;
cin >> s;
unordered_map<char, int> dic;
for (char c : s) {
dic[c]++;
}
int res = 0;
res += dic['0'] + dic['6'] + dic['9'] + dic['8'] * 2;
cout << res << endl;
return 0;
}
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
Map<Character, Integer> dic = new HashMap<>();
for (char c : s.toCharArray()) {
dic.put(c, dic.getOrDefault(c, 0) + 1);
}
int res = 0;
res += dic.getOrDefault('0', 0) + dic.getOrDefault('6', 0) + dic.getOrDefault('9', 0) + dic.getOrDefault('8', 0) * 2;
System.out.println(res);
}
}
Python:[此代码未进行大量数据的测试,仅供参考]
s = input() from collections import Counter dic = Counter(s) res = 0 res += dic['0'] + dic['6'] + dic['9'] + dic['8']*2 print(res)
第二题
题目:好元素
游游定义一个排列中,满足以下条件的元素为”好元素“:对于第i个元素ai 而言,ai 是前i个元素的最大值。例如,[3,1,5,2,4],第一个和第三个元素是好元素。游游希望你构建一个长度为n的排列,其中有k个好元素,且任意两个好元素相邻。你能帮帮她吗?
排列的定义:由1到n的所有正整数组成的长度为n的数组,每个正整数正好出现一次。
输入描述
两个正整数n,k,用空格隔开。
1<=n<=105
1<=k<=[n//2]
输出描述
一行n个正整数,代表游游构造的排列。有多解的时候输出任意即可。
样例输入
5 2
样例输出
4 2 5 1 3
参考题解
贪心算法。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
vector<int> ans(n);
for (int i = 0; i < n; i++) {
ans[i] = i + 1;
}
int j = n - k;
int i = 0;
int pos = 0;
while (pos < k) {
swap(ans[i], ans[j]);
i += 2;
pos++;
j++;
}
for (int r : ans) {
cout << r << " ";
}
return 0;
}
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int k = scanner.nextInt();
int[] ans = new int[n];
for (int i = 0; i < n; i++) {
ans[i] = i + 1;
}
int j = n - k;
int i = 0;
int pos = 0;
while (pos < k) {
int temp = ans[i];
ans[i] = ans[j];
ans[j] = temp;
i += 2;
pos++;
j++;
}
for (int r : ans) {
System.out.print(r + " ");
}
}
}
Python:[此代码未进行大量数据的测试,仅供参考]
n, k = map(int, input().split(" "))
ans = [i for i in range(1, n + 1)]
j,i = n - k, 0
pos = 0
while pos < k:
ans[i], ans[j] = ans[j], ans[i]
i += 2
pos += 1
j += 1
for r in ans:
print(r, end=" ")
第三题
题目:树上的染色
游游拿到一棵树,树的每条边有边权。游游准备选择一些边染成红色,她希望不存在两条染红的边共用同一个点,且最终染红边的边权之和尽可能大。你能帮帮她吗?
注:所谓树,即不包含重边、自环和回路的无向连通图。
输入描述
第一行输入一个正整数n,代表节点的数量。
接下来n-1行,每行输入三个正整数u,v,w,代表点u和点v之间有一条权值为w的无
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。
查看20道真题和解析
