携程笔试 携程笔试题 0507

笔试时间:2025年5月7日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题:游游的网站

游游正在统计自己的网站是更受男性喜欢还是女性喜欢。

她一共统计了n个时刻,使用一个仅由'M'和'W'两个字符构成的字符串s来描述。其中,第i个时刻si =M 代表当前这个时刻有一个男性进入了自己的网站;反之,则为一个女性进入。

现在游游想知道,有多少个这样的时刻,进入过网站的男性的数量多于女性。

输入描述

第一行一个整数n,表示游游统计的时长。

第二行一个长度为n的字符串,保证输入只含 'M' 或者 'W'。

输出描述

一个整数,表示有多少时刻游游的网站内是男性的数量多于女性的。

样例输入

4

WMMM

样例输出

2

参考题解

签到题,遍历字符串,同时使用一个计数器,碰到M就加一,否则减一,只要计数器大于0则答案加一。

C++:

#include <iostream>
#include <string>
using namespace std;

int main() {
    int n;
    cin >> n;
    string s;
    cin >> s;
    int res = 0;
    int x = 0;
    for (char c : s) {
        x += (c == 'M') ? 1 : -1;
        if (x > 0) {
            res++;
        }
    }
    cout << res << endl;
    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();
        scanner.nextLine(); // 消耗换行符
        String s = scanner.nextLine();
        int res = 0;
        int x = 0;
        for (char c : s.toCharArray()) {
            x += (c == 'M') ? 1 : -1;
            if (x > 0) {
                res++;
            }
        }
        System.out.println(res);
        scanner.close();
    }
}

Python:

n = int(input())
s = input()
res = 0
x = 0
for c in s:
    x += 1 if c == "M" else -1
    if x > 0:
        res += 1
print(res)

第二题:游游的op矩阵

游游有一个大小为 n * m 的只由字母'o','p'组成的矩阵。游游每次操作可以将一个字母'o'变成'p',她想知道将矩阵变成中心对称至少需要操作几次。

中心对称是指,把矩阵绕着中心点旋转 180°后,仍与原矩阵一样。

输入描述

第一行输入两个整数n, m,表示矩阵大小。

接下来n行,每行输入一个长度为 m,且只由字母'o','p'组成的字符串si。

输出描述

输出一个整数表示答案。

样例输入

2 2

oo

op

样例输出

1

参考题解

位置(i,j)的中心对称位置是(n-i-1,m-j-1),只要这一对位置对应的字符不同则说明需要修改一次,此时答案加一。同时为了避免访问过的位置重复访问,只需要检查矩阵的一半即可。

C++:

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    vector<string> a(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    int res = 0;
    for (int x1 = 0; x1 < n; x1++) {
        for (int y1 = 0; y1 < m; y1++) {
            int x2 = n - x1 - 1;
            int y2 = m - y1 - 1;
            if (x1 > x2) continue;
            if (x1 == x2 && y1 >= y2) continue;
            if (a[x1][y1] == a[x2][y2]) continue;
            res++;
        }
    }
    cout << res << endl;
    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 m = scanner.nextInt();
        scanner.nextLine(); // 消耗换行符
        String[] a = new String[n];
        for (int i = 0; i < n; i++) {
            a[i] = scanner.nextLine();
        }
        int res = 0;
        for (int x1 = 0; x1 < n; x1++) {
            for (int y1 = 0

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2025 春招笔试合集 文章被收录于专栏

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

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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