2023 美团笔试题 0513
笔试时间:2023年05月13日 暑期实习
第一题
题目:小美的整数
小美有两个数字,其中第一个数字是任意的正整数,第二个数字是一位仅可能为0到9间的整数。小美希望能将第二个插入第一个数字中,以得到最大的数字。具体可参见输入输出样例。
输入描述
单个测试用例包含T组数据
第一行一个数字表示T
对于每一组数据,包含一行有2个空格隔开的整数,表示任意正整数a和待插入的数字b。
1≤T≤10, 1≤a≤1050000, 0≤b≤9
输出描述
对于每组数据,输出一行,包括一个整数,得到的最大整数。
样例输入
4
76543 4
1 0
44 5
666 6
样例输出
765443
10
544
6666
参考题解
C++:
#include <iostream> #include <string> using namespace std; int main() { int T; cin >> T; while (T--) { int a, b; cin >> a >> b; string s = to_string(a); for (int i = 0; i < s.length(); i++) { if (s[i] - '0' < b) { cout << s.substr(0, i) << b << s.substr(i) << endl; break; } } if (s.back() - '0' >= b) { cout << s << b << endl; } } return 0; }
Java:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int T = scanner.nextInt(); while (T-- > 0) { int a = scanner.nextInt(); int b = scanner.nextInt(); String s = Integer.toString(a); for (int i = 0; i < s.length(); i++) { if (s.charAt(i) - '0' < b) { System.out.println(s.substring(0, i) + b + s.substring(i)); break; } } if (s.charAt(s.length() - 1) - '0' >= b) { System.out.println(s + b); } } } }
Python:
T = int(input()) def solv(): a, b = map(int, input().split(" ")) s = str(a) for i in range(len(s)): if int(s[i]) < b: print(s[:i] + str(b) + s[i:]) return print(s + str(b)) for i in range(T): solv()
第二题
题目:小美比赛
小美在参加送外卖比赛。比赛共有n个人参加,其中第 i 人的能力值为 i 。每个人有颜色黄或蓝。如果不同颜色对决,则能力大者赢。如果相同颜色对决,则能力小者赢。所有人都会两两比赛,请给出每个人能赢多少场。
输入描述
单个测试用例包含多组数据
第一行一个整数T,表示接下来有T组数据
对于每一组数据,包含两行数据,第一行是人数n。
第二行有n个数 ai(ai只会取0或1),0表示黄色,1表示蓝色。
数字间两两空格隔开。
1≤T≤5,1≤n≤50000,0≤ai≤1
输出描述
对于每组数据,输出一行,包括n个整数,每个整数表示每个人能赢多少场。
样例输入
2
3
0 0 1
4
1 0 1 0
样例输出
1 0 2
1 2 1 2
样例第一行为T,表示接下来有2组数据。其中第一组中,第一个人会赢第二个人,第三个人会赢前两个人,所以答案为1 0 2
参考题解
前缀和模拟即可。
C++:
#include <iostream> #include <vector> using namespace std; int main() { int T; cin >> T; while (T--) { int n; cin >> n; vector<int> colors(n); for (int i = 0; i < n; i++) { cin >> colors[i]; } vector<int> pres0(n + 1, 0); vector<int> pres1(n + 1, 0); for (int i = 1; i <= n; i++) { if (colors[i - 1] == 0) { pres0[i] = pres0[i - 1] + 1; pres1[i] = pres1[i - 1]; } else { pres1[i] = pres1[i - 1] + 1; pres0[i] = pres0[i - 1]; } } vector<int> res(n, 0); for (int i = 0; i < n; i++) { vector<int>& pre = (colors[i] == 0) ? pres0 : pres1; vector<int>& opre = (colors[i] == 0) ? pres1 : pres0; res[i] += opre[i]; res[i] += pre[n] - pre[i + 1]; } for (int i = 0; i < n; i++) { cout << res[i] << " "; } cout << endl; } return 0; }
Java:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int T = scanner.nextInt(); while (T-- > 0) { int n = scanner.nextInt(); int[] colors = new int[n]; for (int i = 0; i < n; i++) { colors[i] = scanner.nextInt(); } int[] pres0 = new int[n + 1]; int[] pres1 = new int[n + 1]; for (int i = 1; i <= n; i++) { if (colors[i - 1] == 0) { pres0[i] = pres0[i - 1] + 1; pres1[i] = pres1[i - 1]; } else { pres1[i] = pres1[i - 1] + 1; pres0[i] = pres0[i - 1]; } } int[] res = new int[n]; for (int i = 0; i < n; i++) {
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。