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多种语言分析,解答。
