饿了么笔试 饿了么秋招 0912

笔试时间:2025年9月12日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题

给定整数 n、m、k,请你在 n 行 m 列的网格中填入整数,使得:

  • 每个格子填入的整数在 1 到 k 之间
  • 每个整数恰好出现 (n*m)/k 次
  • 对于每个 i (1≤i≤k),编号为 i 的格子构成的连通块(基于四相邻)是连通的

输入描述

第一行输入一个整数 t (1≤t≤500),表示测试用例数。 接下来 t 行,每行输入三个整数 n、m、k,满足 1≤n,m≤100、1≤k≤nm 且 nm 能被 k 整除。

输出描述

对于每个测试用例,输出 n 行,每行 m 个整数,表示一种满足条件的网格填充方案。

样例输入

2

2 2 2

2 4 2

样例输出

1 1

2 2

1 1 1 1

2 2 2 2

第一组输出中,1 和 2 各出现 2 次,且编号相同的格子各自构成基于 4 邻接的连通块; 第二组输出中,1 和 2 各出现 4 次,且编号相同的格子各自构成基于 4 邻接的连通块。

参考题解

解题思路:

使用蛇形遍历保证连通性。将网格按蛇形路径(第一行从左到右,第二行从右到左,交替进行)遍历,然后将整个路径分成 k 段,每段长度为 (n*m)/k,每段填充同一个数字。这样相同数字的格子必然在路径上连续,因此它们在网格中也一定是连通的。

C++:

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

void solve() {
    int n, m, k;
    cin >> n >> m >> k;
    
    int cells_per_num = (n * m) / k;
    vector<vector<int>> grid(n, vector<int>(m, 0));
    
    int current_num = 1;
    int count_for_current_num = 0;
    
    for (int i = 0; i < n; i++) {
        if (i % 2 == 0) {
            for (int j = 0; j < m; j++) {
                grid[i][j] = current_num;
                count_for_current_num++;
                if (count_for_current_num == cells_per_num && current_num < k) {
                    current_num++;
                    count_for_current_num = 0;
                }
            }
        } else {
            for (int j = m - 1; j >= 0; j--) {
                grid[i][j] = current_num;
                count_for_current_num++;
                if (count_for_current_num == cells_per_num && current_num < k) {
                    current_num++;
                    count_for_current_num = 0;
                }
            }
        }
    }
    
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cout << grid[i][j];
            if (j < m - 1) cout << " ";
        }
        cout << "\n";
    }
}

int main() {
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}

Java:

import java.util.*;

public class Main {
    public static void solve(Scanner sc) {
        int n = sc.nextInt();
        int m = sc.nextInt();
        int k = sc.nextInt();
        
        int cellsPerNum = (n * m) / k;
        int[][] grid = new int[n][m];
        
        int currentNum = 1;
        int countForCurrentNum = 0;
        
        for (int i = 0; i < n; i++) {
            if (i % 2 == 0) {
                for (int j = 0; j < m; j++) {
                    grid[i][j] = currentNum;
                    countForCurrentNum++;
                    if (countForCurrentNum == cellsPerNum && currentNum < k) {
                        currentNum++;
                        countForCurrentNum = 0;
                    }
                }
            } else {
                for (int j = m - 1; j >= 0; j--) {
                    grid[i][j] = currentNum;
                    countForCurrentNum++;
                    if (countForCurrentNum == cellsPerNum && currentNum < k) {
                        currentNum++;
                        countForCurrentNum = 0;
                    }
                }
            }
        }
        
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                System.out.print(grid[i][j]);
                if (j < m - 1) System.out.print(" ");
            }
            System.out.println();
        }
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        for (int i = 0; i < t; i++) {
            solve(sc);
        }
        sc.close();
    }
}

Python:

import sys

def solve():
    n, m, k = map(int, sys.stdin.readline().split())
    cells_per_num = (n * m) // k
    grid = [[0] * m for _ in range(n)]
    
    current_num = 1
    count_for_current_num = 0
    
    for i in range(n):
        if i % 2 == 0:
            columns_iterator = range(m)
        else:
            columns_iterator = range(m - 1, -1, -1)
        
        for j in columns_iterator:
            grid[i][j] = current_num
            count_for_current_num += 1
            if count_for_current_num == cells_per_num and current_num < k:
                current_num += 1
                count_for_current_num = 0
    
    for row in grid:
        print(*row)

t = int(sys.stdin.readline())
for _ in range(t):
    solve()

第二题

给定三个整数 a、b、c,你可以且必须恰好执行一次如下操作:选择一个整数 t,并将 a、b、c 中恰好一个数乘以 t。完成上述操作后,你可以对这三个数进行任意重排。请判断是否存在一种选择,使得最终得到的三个数可以重排成一个等比数列。

输入描述

每个测试文件均包含多组测试数据。第一行输入一个整数 t (1≤t≤500) 代表数组组数。 每组测试数据:在一行上输入三个整数 a,b,c (-10^9≤a,b,c≤10^9)。

输出描述

对于每一组测试数据,新起一行。若存在可行方案,输出 YES;否则输出 NO。

样例输入

4

2 3 6

1 2 3

2 4 8

5 1 25

样例输出

YES

NO

YES

YES

参考题解

解题思路:

等比数列的特点是中间项的平方等于两边项的乘积。枚举修改哪个数(a、b或c),然后检查是否存在整数t使得修改后的三个数能构成等比数列。对于每种修改情况,考虑修改后的数在等比数列中的位置(首项、中项或末项),利用等比数列的性质求出所需的t值并检查是否为整数。

C++:

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

bool check(long long p, long long q, long long r) {
    // 可能性1: q是中间项
    if ((q * q) % r == 0) {
        long long new_p = (q * q) / r;
        if (new_p % p == 0) return true;
    }
    
    // 可能性2: r是中间项
    if ((r * r) % q == 0) {
        long long new_p = (r * r) / q;
        if (new_p % p == 0) return true;
    }
    
    // 可能性3: 

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

2025 春招笔试合集 文章被收录于专栏

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

全部评论

相关推荐

今天 00:16
已编辑
蚌埠坦克学院 前端工程师
1.&nbsp;web网页端与&nbsp;B&nbsp;端小程序,有没有针对不同的分辨率去做一些适配呢?2.&nbsp;&nbsp;1rem&nbsp;等于多少&nbsp;px?它是基于什么来确定的?3.&nbsp;&nbsp;除了rem,还知道有哪些可以进行适配吗?4.&nbsp;&nbsp;实习项目中分页加载、滚动加载、预加载是怎么实现的5.&nbsp;虚拟列表刷到了最后一页,这个时候里面的DOM有什么变化吗?6.&nbsp;它里面还会有一个占位吗?还是说用户还以为它可以无限的往上面去加载呢?7.&nbsp;实习项目中如何实现组件按需引入8.&nbsp;还知道有有哪些前端性能优化手段?9.&nbsp;TDesign可以适配React和Vue吗,TDesign组件按需引入知道它的原理是什么吗10.&nbsp;封装sdk,如何支持动态字段扩展的可复用模块11.&nbsp;了解过低代码的设计逻辑吗12.&nbsp;实习项目中的批量导入功能如何实现的,以及实现过程中遇到了棘手的问题嘛13.&nbsp;时间轴联动功能拖拽底下的时间轴的时候,Echarts&nbsp;它里面支持直接监听它的拖拽的动作吗?14.&nbsp;既然支持,为啥还要进行二次封装15.&nbsp;项目中封装公共组件库是封装到本地还是又起了一个库,然后通过publish&nbsp;这种方式发布出去,然后再引用上?16.&nbsp;Vue&nbsp;3&nbsp;和&nbsp;React的区别17.&nbsp;setTimeout,还有&nbsp;Promise,还有&nbsp;async/await的区别18.&nbsp;从他们这个宏观任务、微观任务这方面来分析一下他们三个的区别19.&nbsp;数组常见操作方法,**`join`**会改变原数组吗?20.&nbsp;重绘和重排是啥,如何减少21.&nbsp;平时怎么学习Web&nbsp;前沿技术22.&nbsp;未来有什么规划吗?23.&nbsp;了解Agent这样的&nbsp;AI&nbsp;大模型吗、24.&nbsp;Agent它的主要应用是在哪一方面一面无手撕,大部分围绕实习和项目问,一面完秒过
投递百度等公司10个岗位
点赞 评论 收藏
分享
09-22 22:22
中山大学 Java
双尔:赌对了,不用经历秋招的炼狱真的太好了,羡慕了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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