蚂蚁笔试 蚂蚁笔试题 0323

笔试时间:2025年03月23日

历史笔试传送门:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题

题目:生成字符串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 春招笔试合集 文章被收录于专栏

2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

全部评论

相关推荐

投递蚂蚁集团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务