携程笔试 携程笔试题 0507
笔试时间:2025年5月7日
往年笔试合集:
第一题:游游的网站
游游正在统计自己的网站是更受男性喜欢还是女性喜欢。
她一共统计了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等多种语言做法集合指南
