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