蚂蚁笔试 蚂蚁笔试题 0323
笔试时间:2025年03月23日
历史笔试传送门:
第一题
题目:生成字符串T
小红给定了两个长度均为n的字符串s1和s2,仅包含小写字母。
她想通过s1和s2生成一个长度为n的字符串T,T的生成规对如下:
对于第i位,若s1_i=s2_i,则Ti为Si的大写形式,否则Ti=max(s1_i, s2_i),其中max(x, y)表示x和y字典序中较大的一个。
现在小红想知道生成的字符串T。
输入描述
第一行一个整数n,表示字符串长度。
第二行一个字符串s1,仅包含小写字母。
第三行一个字符串s2,仅包含小写字母。
输出描述
一个字符串,表示T。
样例输入
3
abc
abd
样例输出
ABd
参考题解
按照题目要求判断每一位的字母大小即可。
C++:[此代码未进行大量数据的测试,仅供参考]
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
string s1,s2;
cin >> s1;
cin >> s2;
string ans = "";
for(int i = 0;i < n;i++){
if(s1[i] == s2[i]) ans += (char)(s1[i] - 'a' + 'A');
else{
ans += (char)max(s1[i],s2[i]);
}
}
cout << ans << 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();
String s1 = scanner.next();
String s2 = scanner.next();
StringBuilder ans = new StringBuilder();
for (int i = 0; i < n; i++) {
char c1 = s1.charAt(i);
char c2 = s2.charAt(i);
if (c1 == c2) {
ans.append(Character.toUpperCase(c1));
} else {
ans.append((char) Math.max(c1, c2));
}
}
System.out.println(ans.toString());
}
}
Python:[此代码未进行大量数据的测试,仅供参考]
n = int(input())
s1 = input()
s2 = input()
ans = ""
for i in range(n):
if s1[i] == s2[i]:
ans += s1[i].upper()
else:
ans += max(s1[i], s2[i])
print(ans)
第二题
题目:构建排列
给定一个长度为n-1的01字符串,要求构建一个从1到n各出现一次的长度为n的排列。
字符串的第i位为0表示排列第i+1位比第i位小,反之,第i位为1表示排列第i+1位比第i位大。
输入描述
输入为一个长度为n-1的01字符串。
输出描述
输出一个满足条件的排列,如果没有满足要求的排列则输出“-1”。
如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。
注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
样例输入
0101
样例输出
3 2 4 1 5
说明:
构建的排列为3,2,4,1,5。
s1=0,排列a2=2比a1=3小;
s2=1,排列a3=4比a2=2大;
s3=0,排列a4=1比a3=4小;
s4=1,排列a5=5比a4=1大。
参考题解
构造,对于1就放剩余最小的数,对于0就放剩余最大的数,这样就能保证放的数符合题意。所以维护当前最小和当前最大的数,模拟即可。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
int lc = 0;
int rc = s.length();
vector<int> res;
for (int i = 0; i < s.length(); i++) {
if (s[i] == '1') {
res.push_back(lc);
lc++;
} else {
res.push_back(rc);
rc--;
}
}
res.push_back(lc);
for (int i = 0; i < res.size(); i++) {
cout << (res[i] + 1) << " ";
}
}
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
int lc = 0;
int rc = s.length();
List<Integer> res = new ArrayList<>();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '1
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南
