饿了么笔试 饿了么笔试题 0307

笔试时间:2025年03月07 春招实习

历史笔试传送门:2023秋招笔试合集

第一题

题目:小红的字符串

小红拿到了一个01串s。

她将进行恰好一次以下操 作:选择下标i,j(i≠j),交换si和sj。

小红想知道,不同的操作方案,最终能生成多少不 同的字符串?

输入描述

一个仅由'0'和"1'构成的字符串。字符串长度不小于2,不大于200000。

输出描述

一个整数,代表最终的方案数。

样例输入

1100

样例输出

5

说明:

共有以下5种不同字符串:

交换第一个和第二个字符,形成1100

交换第二个和第三个字符,形成1010

交换第二个和第四个字符,形成1001

交换第一个和第三个字符,形成0110

交换第一个和第四个字符,形成0101

参考题解

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s;
    getline(cin, s);

    long long cnt_0 = 0, cnt_1 = 0, ans = 1;
    for (char c : s) {
        if (c == '0') {
            ans += cnt_1;
            cnt_0++;
        } else {
            ans += cnt_0;
            cnt_1++;
        }
    }
    cout << ans << endl;
    return 0;
}

Java:[此代码未进行大量数据的测试,仅供参考]

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();

        long cnt_0 = 0, cnt_1 = 0, ans = 1;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == '0') {
                ans += cnt_1;
                cnt_0++;
            } else {
                ans += cnt_0;
                cnt_1++;
            }
        }
        System.out.println(ans);
        sc.close();
    }
}

Python:[此代码未进行大量数据的测试,仅供参考]

import sys
s = input()

cnt_0 = 0 
cnt_1 = 0
ans = 1
for i,c in enumerate(s):
    if c == '0':
        ans += cnt_1
        cnt_0 += 1
    else:
        ans += cnt_0
        cnt_1 += 1
print(ans)

第二题

题目:小红的验证码

小红是一个程序员,他正在开发一个验证码功能。

为了正确识别机器人和真实用户,小红需要对验证码进行特殊处理。

他想出来了如下加密法:图像+数字识别法,在一张5x5图片中放入一个数字,例如:

#222#

#2###

#232#

###2#

#272#

这张图片机器人会识别数字 22222322272,但是正确的识别码为 5。 给出所有的数字摆放形态:

系统将会在?处随机填入[0,9]的数字,然后给出m个图片,为 pitcurei(1<=i<=m),你需要按照1~m的顺序输出这 m 个数字以正确识别小红的系统。

输入描述

第一行一个整数 m(1<m<1000),表示图片个数。接下来共 m*5行,每行5列,表示给定的图片。输入保证仅含 [0,9] 和 #。

输出描述

一个整数,表示图片所所表示的正确验证码。

样例输入一

1

#222#

#2###

#232#

###2#

#272#

样例输出一

5

样例输入二

2

#222#

#2###

#232#

###2#

#272#

##1##

##1##

##1##

##1##

##1##

样例输出二

51

参考题解

将所有输入的矩阵中的数字字符进行统一处理,接着预处理出所有的数字对应的矩阵比对。

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <vector>
#include <string>
#include <cctype>

using namespace std;

int main(){
    int n;
    cin >> n;
    cin.ignore();  // 清除换行符

    // 定义样本数组 s0
    vector<vector<string>> s0 = {
        {"#000#","#0#0#","#0#0#","#0#0#","#000#"},
        {"##0##","##0##","##0##","##0##","##0##"},
        {"#000#","###0#","#000#","#0###","#000#"},
        {"#000#","###0#","#000#","###0#","#000#"},
        {"#0#0#","#0#0#","#000#","###0#","###0#"},
        {"#000#","#0###","#000#","###0#","#000#"},
        {"#000#","#0###","#000#","#0#0#","#000#"},
        {"#000#","###0#","###0#","###0#","###0#"},
        {"#000#","#0#0#","#000#","#0#0#","#000#"},
        {"#000#","#0#0#","#000#","###0#","#000#"}
    };

    string res = "";

    for (int i = 0; i < n; i++){
        vector<string> matrix(5);
        // 读入5行
        for (int j = 0; j < 5; j++){
            getline(cin, matrix[j]);
        }
        // 扫描并将数字字符替换为 '0'
        for (int row = 0; row < 5; row++){
            for (int col = 0; col < 5; col++){
                if (isdigit(matrix[row][col])){
                    matrix[row][col] = '0';
                }
            }
        }
        // 将 matrix 与 s0 中的每个模式比对
        for (int j = 0; j < 10; j++){
            if (matrix == s0[j]){
                res += char('0' + j);
                break;  // 假设每个矩阵只匹配一个模式
            }
        }
    }
    cout << res;
    return 0;
}

Java:[此代码未进行大量数据的测试,仅供参考]

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine(); // 消耗换行符

        // 定义样本数组 s0
        String[][] s0 = {
            {"#000#","#0#0#","#0#0#","#0#0#","#000#"},
            {"##0##","##0##","##0##","##0##","##0##"},
            {"#000#","###0#","#000#","#0###","#000#"},
            {"#000#","###0#","#000#","###0#","#000#"},
            {"#0#0#","#0#0#","#000#","###0#","###0#"},
            {"#000#","#0###","#000#","###0#","#000#"},
            {"#000#","#0###","#000#","#0#0#","#000#"},
            {"#000#","###0#","###0#","###0#","###0#"},
            {"#000#","#0#0#","#000#","#0#0#","#000#"},
            {"#000#","#0#0#","#000#","###0#","#000#"}
        };

        StringBuilder res = new StringBuilder();

        for (int i = 0; i < n; i++) {
            String[] matrix = new String[5];
            // 读入5行
            for (int j = 0; j < 5; j++) {
                matrix[j] = sc.nextLine();
            }
            // 扫描并将数字字符替换为 '0'
            for (int row = 0; row < 5; row++) {
                StringBuilder sb = new StringBuilder(matrix[row]);
                for (int col = 0; col < 5; col++) {
                    if (Character.isDigit(sb.charAt(col))) {
                        sb.setCharAt(col, '0');
                    }
                }
                matrix[row] = sb.toString();
            }
            // 将 matrix 与 s0 中的每个模式比对
            for (int j = 0; j < 10; j++

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024 BAT笔试合集 文章被收录于专栏

持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。

全部评论
第一题零和一个数相乘加一就是答案,第二题将二维码转成一串字符串,用hashmap存
1 回复 分享
发布于 2025-03-11 20:57 湖南
mark一下
点赞 回复 分享
发布于 2025-04-07 01:49 上海
请问前端也考的这个吗?
点赞 回复 分享
发布于 2025-03-08 00:24 湖南

相关推荐

最终还是婉拒了小红书的offer,厚着脸皮回了字节。其实这次字节不管是组内的氛围、HR的沟通体验,都比之前好太多,开的薪资也还算过得去,这些都是让我下定决心的原因之一。但最核心的,还是抵不住对Agent的兴趣,选择了Ai&nbsp;Coding这么一个方向。因为很多大佬讲过,在未来比较火的还是属于那些更加垂类的Agent,而Ai&nbsp;Coding恰好是Coding&nbsp;Agent这么一个领域,本质上还是程序员群体和泛程序员群体这个圈子的。目前也已经在提前实习,也是全栈这么一个岗位。就像最近阿里P10针对前端后端等等不再那么区分,确实在Agent方向不太区分这个。尤其是我们自己做AI&nbsp;Coding的内容,基本上90%左右的内容都是AI生成的,AI代码仓库贡献率也是我们的指标之一。有人说他不好用,那肯定是用的姿态不太对。基本上用对Skill、Rules&nbsp;加上比较好的大模型基本都能Cover你的大部分需求,更别说Claude、Cursor这种目前看来Top水准的Coding工具了(叠甲:起码在我看来是这样)。所以不太区分的主要原因,还是针对一些例如Claude&nbsp;Code、Cursor、Trae、Codex、CC等一大堆,他们有很多新的概念和架构提出,我们往往需要快速验证(MVP版本)来看效果。而全栈就是这么快速验证的一个手段,加上Ai&nbsp;Coding的辅助,目前看起来问题不大(仅仅针对Agent而言)。而且Coding的产品形态往往是一个Plugin、Cli之类的,本质还是属于大前端领域。不过针对业务后端来看,区分还是有必要的。大家很多人也说Agent不就是Prompt提示词工程么?是的没错,本质上还是提示词。不过现在也衍生出一个新的Context&nbsp;Eneering,抽象成一种架构思想(类比框架、或者你们业务架构,参考商品有商品发布架构来提效)。本质还是提示词,但是就是能否最大化利用整个上下文窗口来提升效果,这个还是有很多探索空间和玩法的,例如Cursor的思想:上下文万物皆文件,&nbsp;CoWork之类的。后续也有一些Ralph&nbsp;Loop啥的,还有Coding里面的Coding&nbsp;Act姿态。这种才是比较核心的点,而不是你让AI生成的那提示词,然后调用了一下大模型那么简单;也不是dify、LangGraph搭建了一套workflow,从一个node走到另外一个node那么简单。Agent和WorkFLow还是两回事,大部分人也没能很好的区分这一点。不过很多人说AI泡沫啥啥啥的,我们ld也常把这句话挂在嘴边:“说AI泡沫还是太大了”诸如此类。我觉得在AI的时代,懂一点还是会好一点,所以润去字节了。目前的实习生活呢,除了修一些Tools的问题,还包括对比Claude、Cursor、Trae在某些源码实现思想上的点,看看能不能迁移过来,感觉还是比较有意思。不过目前组内还是主要Follow比较多,希望下一个阶段就做一些更有创新的事情哈哈。这就是一个牛马大学生的最终牧场,希望能好好的吧。说不定下次发的时候,正式AI泡沫结束,然后我又回归传统后端这么一个结局了。欢迎交流👏,有不对的🙅不要骂博主(浅薄的认知),可以私聊交流
码农索隆:和优秀的人,做有挑战的事
点赞 评论 收藏
分享
评论
4
35
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务