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 秋招笔试题汇总解析 文章被收录于专栏

2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

全部评论

相关推荐

2024-12-20 18:56
已编辑
武汉轻工大学 后端
牛牛大啊:er图都冒出来了😂
点赞 评论 收藏
分享
就用这个吧:支持多益再加一个空气使用费
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客企业服务