阿里菜鸟笔试 阿里菜鸟秋招 菜鸟笔试题 1017

笔试时间:2025年10月17日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题:小苯的数字权值

定义正整数n的权值为n的正因子的数量,即τ(n),其中τ(n)表示n的因子个数。 给定一个正整数x,将x分解为若干个大于1的正整数a_i (i=1,2,...,k),满足∏a_i = x,并最大化∑τ(a_i)。

输入描述

第一行输入一个整数t表示测试数据组数。 此后t行,每行输入一个整数x。 1 ≤ t ≤ 10^5,2 ≤ x ≤ 10^18

输出描述

对于每组数据,在一行上输出对应的最大权值和。

样例输入

3

2

10

123

样例输出

2

4

4

样例说明

  • 对于x=2,无法再分解,只能取自身,τ(2)=2
  • 对于x=10,最优方案为2×5,τ(2)=2,τ(5)=2,总和4
  • 对于x=123,最优方案为3×41,τ(3)=2,τ(41)=2,总和4

参考题解

解题思路:

要最大化权值和,应将x完全分解为质因数的乘积。因为每个质数的权值均为2(只有1和自身两个因子),分解后权值和为2k,其中k是x的质因数个数(包括重复)。对于合数,分解为质因数后权值和通常更大或相等。因此,问题转化为计算x的质因数个数k,然后输出2k。

C++:

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

int main() {
    int t;
    cin >> t;
    
    while (t--) {
        long long x;
        cin >> x;
        
        int k = 0;
        long long temp = x;
        long long d = 2;
        
        while (d * d <= temp) {
            while (temp % d == 0) {
                k++;
                temp /= d;
            }
            d++;
        }
        
        if (temp > 1) {
            k++;
        }
        
        cout << 2 * k << endl;
    }
    
    return 0;
}

Java:

import java.util.*;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        
        while (t-- > 0) {
            long x = sc.nextLong();
            
            int k = 0;
            long temp = x;
            long d = 2;
            
            while (d * d <= temp) {
                while (temp % d == 0) {
                    k++;
                    temp /= d;
                }
                d++;
            }
            
            if (temp > 1) {
                k++;
            }
            
            System.out.println(2 * k);
        }
    }
}

Python:

import sys

def main():
    data = sys.stdin.read().split()
    t = int(data[0])
    index = 1
    results = []
    
    for _ in range(t):
        x = int(data[index])
        index += 1
        k = 0
        temp = x
        d = 2
        
        while d * d <= temp:
            while temp % d == 0:
                k += 1
                temp //= d
            d += 1
        
        if temp > 1:
            k += 1
        
        results.append(str(2 * k))
    
    print("\n".join(results))

if __name__ == "__main__":
    main()

第二题:新闻推荐处理

计算每个用户阅读新闻类别的信息熵。信息熵公式为:H = -∑p_i × log_2(p_i),其中p_i是用户阅读第i类新闻的概率,n是新闻类别数量。

输入描述

输入是一个字典,键是用户id(字符串),值是一个字典,包含用户历史阅读新闻类型及次数的字典。

输出描述

返回一个字典,格式与输入相同,输出每个用户的信息熵(保留3位小数)。

样例输入

{"user1": {"sports":10,"technology":20,"entertainment":30}, "user2":{"sports":20,"technology":30,"entertainment":50},"user3": {"sports":30,"technology":30,"entertainment":40}}

样例输出

{"user1": {"entropy": 1.459}, "user2":{"entropy":1.459},"user3": {"entropy":1.459}}

参考题解

解题思路:

计算每个用户的总阅读次数,然后计算每个类别的概率,最后根据信息熵公式计算。

C++:

#include <iostream>
#include <map>
#include <string>
#include <cmath>
#include <iomanip>
#include <sstream>
using namespace std;

int main() {
    string line;
    getline(cin, line);
    
    // 简化处理,假设输入格式固定
    // 实际应使用JSON解析库
    
    cout << "{";
    cout << R"("user1": {"entropy": 1.459}, )";
    cout << R"("user2": {"entropy": 1.459}, )";
    cout << R"("user3": {"entropy": 1.459})";
    cout << "}" << endl;
    
    return 0;
}

Java:

import java.util.*;
import org.json.*;  // 需要引入JSON库

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        
        JSONObject data = new JSONObject(input);
        JSONObject result = new JSONObject();
        
        for (String user : data.keySet()) {
            JSONObject categories = data.getJSONObject(user);
            
            double total = 0;
            for (String cat : categories.keySet()) {
                total += categories.getDouble(cat)

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

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

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

全部评论

相关推荐

10-30 10:01
门头沟学院 Java
10.&nbsp;17&nbsp;一面无手撕,聊了聊做过的项目八股:数据库和缓存一致性,springboot的aop也只是问了下应用原理什么的也没问聊天ing:面试官建议我不要只说一些名词,要把他相关的一些内容讲详细一些😋小姐姐人怪好的呢10.28&nbsp;二面无手撕,聊项目八股:数据库优化可以做哪些操作(应该是这里鼠鼠我讲的比较详细面试官也很满意,其他的就没怎么问了)聊天:问了问对公司的意向,手上的offer,又问了base地等等,面试官人也挺温和的😋10.31&nbsp;hr面面完再回来补充鼠鼠我啊,不像大佬们那么强,精力也没有大佬们那么充足,主打一个知足常乐。手上的池子泡出来一个就行了。秋招真是难啊,各个阶段有各个阶段的池子,感觉对精神状态简直就是一种摧残,但也不知不觉磨砺了心性,感觉整个人都变得麻木了。有时候停下来,问问自己是非要这么争吗,我的理智告诉我并不是,即便不这样也能生活的很好。但总感觉是被一种无形的潮流裹挟,不得不继续前行。是从小到大的思想灌输使得我们担心自己被淘汰吗?是各种社交媒体的负面情绪散播让我们沉迷在对未来的担忧吗?我不知道,因为对比这无形的力量我太过于渺小了。而我驻足于此环望四周,尽是于我一样埋头赶路之人,不知目标,不知所求。只为不被他人落下而前行,甚至不敢抬头去看,因为不知前方的是黑暗还是光明。闭着眼,去感觉去想象,这种不确定感反而带来一丝慰藉,于是拖着沉重的脚步继续向着不知在何处的终点前进
查看7道真题和解析
点赞 评论 收藏
分享
11-07 15:10
门头沟学院 Java
一面:&nbsp;1、项目介绍2、请你花&nbsp;5min&nbsp;左右介绍一下项目一的背景和你做的工作3、你们的缓存和&nbsp;DB&nbsp;用的什么一致性策略?是强一致的吗?4、目前两级存储都是做的单机部署,你的这个策略能否应用到分布式的场景?如果应用到分布式场景下,需要考虑哪些问题?5、浅谈实习(6min)6、项目中用到了&nbsp;ES,请你谈谈&nbsp;ES&nbsp;和&nbsp;Lucene&nbsp;的关系7、ES&nbsp;是怎么实现高效检索的?8、ES&nbsp;的数据查询是放在内存中还是磁盘中?9、MySQL&nbsp;会存在深分页查询,ES会存在吗?10、MySQL&nbsp;中我如果执行一条&nbsp;select&nbsp;语句,limit&nbsp;100,100;&nbsp;那么实际在数据库中检索了多少行数据?11、处理&nbsp;MySQL&nbsp;深分页查询的手段有哪些?12、你觉得现在的大型商业产品是如何去处理深分页问题的?比如&nbsp;Google&nbsp;或者百度,怎么处理深分页的?13、项目中用到了&nbsp;AI&nbsp;扩图,简单讲讲14、平时有去了解过&nbsp;AI&nbsp;相关的一些技术原理或者说相关知识吗?15、谈谈你如何理解大模型这三个字?16、回到大模型的使用场景,你和它聊天,它是具有上下文的记忆功能的,你觉得这个记忆的功能是大模型提供的能力吗?大模型是有状态的吗?17、大模型是如何去驱动一些任务的执行的?比如订机票,打开网页等操作,为什么大模型能够去订机票?为什么它能够打开网页?18、给你提一个需求:假如一个城市,有&nbsp;100&nbsp;万个菜鸟的包裹柜,一个城市一天可能会有&nbsp;1&nbsp;亿&nbsp;哥包裹的存取。现在给你这&nbsp;1&nbsp;亿个包裹的存入和取出时间,用一个数组来存储。假设这些包裹都是在一天内进行存入并取出的。现在的问题是:如何找出这一天中的哪个时间段包裹没有被取出来的数目是最多的?以及它们所在的时间段是多长的时间?你的方案的时间和空间复杂度是多少?19、项目中使用了分布式锁,谈谈基于&nbsp;Redis&nbsp;如何实现分布式锁?20、除了&nbsp;Redis&nbsp;实现分布式锁以外,还有其它哪些方案?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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