携程笔试 携程笔试题 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等多种语言做法集合指南