2016美团研发工程师笔试题(让人头疼的两个数字)

本文介绍了2016年美团研发工程师笔试中的一道题目,涉及数字推理。题目要求从2到5中选择两个数,使甲乙两人根据两数之和与之差无法推断出具体数字。通过排除法解析得出答案,并延伸讨论了一道类似的经典问题——鬼谷子问徒,进一步探讨数字推理的思维方式。

前言

博客停止更新一个多月了,之前还下定决心说每周一篇面试题相关的博客的,不过 16 年 12 月到 现在 17 年 3 月过得还是挺充实的,而且也从中学习到了很多;特别在没更新博客这一段时间了,试过了三天只睡了 12 个小时,只为心里的那份信仰。好了,不扯淡了,之后继续更新博客,现在(2017年3月19日00:13:32) 12 点了,看了一些面试题,最终选了 2016 美团研发工程师笔试题的其中一道题来写这篇博客。

题目

从2到5中选两个数,第一个数较大,将两数之和告诉甲,两数之差告诉乙,两个人根据自己手上的数都算不出来答案,求这两个数分别是多少?

A. 4,3
B. 5,3
C. 5,2
D. 4,2

解题

看到这题,第一个想法就是排除法来解了,那么,我们一个一个答案来分析:

  • A 选项中,甲得到的两数之和为 7 , 乙得到的两数之差为 1 ,因此甲从 2 到 5 这四个数中,能组成两数之和为 7 的组合有 (5 , 2) 和 (4 , 3) ,乙组成两数之差为 1 的组合有 (3 , 2) , (4 , 3) 和 (5 , 4) ,因此两个人都算不出答案
  • B 选项,两数为 5 和 3,因此两数之和为 8 ,甲得到数为 8 ,可以猜到的组合就只有 (5 , 3)了,因为题目是说明甲乙两个人都算不出答案,因此排除 B 选项
  • C 选项中,两数为 5 和 2 ,因此两数之差为 3 ,乙得到的数为 3 ,从 2 到 5 中的组合就只有(5 , 2),因此排除 C
  • D 选项中,两数和为 6,组合只有 (4 , 2) , 所以排除 D

拓展

上面的题目是不是挺简单的,那么来拓展一下,看一道类似的经典题目【鬼谷子问徒】

孙膑,庞涓都是鬼谷子的徒弟。一天鬼谷子出了这道题目:
他从 2 到 99 中选出两个不同的整数,把积告诉孙膑,把和告诉庞涓;
庞涓说:我虽然不能确定这两个数是什么,但是我肯定你也不知道这两个数是什么。
孙膑说:我本来的确不知道,但是听你这么一说,我现在能够确定这两个数字了。
庞涓说:既然你这么说,我现在也知道这两个数字是什么了。
请问这两个数字是什么?为什么?

这道题目一定要看,用上面的方法解决太麻烦了吧,先直接写个穷举来看下答案吧


package com.liangdianshui;

/**
 * <p>鬼谷子问徒[经典] 孙膑,庞涓都是鬼谷子的徒弟。一天鬼谷子出了这道题目: 他从2到99中选出两个不同的整数,把积告诉孙膑,把和告诉庞涓;
 * 庞涓说:我虽然不能确定这两个数是什么,但是我肯定你也不知道这两个数是什么。 
 * 孙膑说:我本来的确不知道,但是听你这么一说,我现在能够确定这两个数字了。
 * 庞涓说:既然你这么说,我现在也知道这两个数字是什么了。 请问这两个数字是什么?为什么?
 * </p>
 * 
 * @author Administrator
 *
 */
public class DigitalProblem {

    public static void main(String[] args) {
        for (int n = 6; n < 200; ++n) // 穷举和的可能,最大不超过200
        {
            // 其和能同时满足条件1和3者即为结果
            if (p1(n) && p3(n)) {
                // 找出对应解
                for (int t = 2; t * 2 < n; ++t) {
                    if (p2(t * (n - t))) // 分拆结果符合条件2就输出
                        System.out.println("(" + t + "," + (n - t) + ")");
                }
            }
        }
    }

    /**
     * 是否是唯一分解
     * 
     * @param n
     * @param nMax
     *            最大值为100
     * @return
     */
    public static boolean isOnlySolve(int n, int nMax) {
        int nRet = 0; // 记录满足本条件数
        for (int i = 2; i * i < n; ++i) {
            if (n % i == 0 && n / i < nMax)
                if (++nRet > 1) {
                    return false;
                }
        }
        return true;
    }

    /**
     * sum的任意和的分拆之积不可能有唯一分解,否则对方可能猜出
     * <p>
     * 我虽然不能确定这两个数是什么,但是我肯定你也不知道这两个数是什么。
     * </p>
     * 
     * @param sum
     * @return
     */
    public static boolean p1(int sum) {
        if (sum < 6)
            return false;
        for (int t = (sum - 1) / 2; t > 1; --t) {
            if (isOnlySolve(t * (sum - t), 100))
                return false;
        }
        return true;
    }

    /**
     * 只有一种积的分拆满足 p1
     * <p>
     * 我本来的确不知道,但是听你这么一说,我现在能够确定这两个数字了
     * </p>
     * 
     * @param times2
     * @return
     */
    public static boolean p2(int times2) {
        int nRet = 0; // 记录满足本条件数
        for (int nd = 2; nd * nd < times2; ++nd) {
            if (times2 % nd == 0 && p1(nd + times2 / nd))
                if (++nRet > 1)
                    return false;
        }
        return true;
    }

    /**
     * 只有一种和的分拆满足 p2
     * <p>
     * 既然你这么说,我现在也知道这两个数字是什么了
     * </p>
     * 
     * @param sum
     * @return
     */
    public static boolean p3(int sum) {
        int nRet = 0; // 记录满足本条件数
        for (int t = (sum - 1) / 2; t > 1; --t) {
            if (p2(t * (sum - t)))
                if (++nRet > 1)
                    return false;
        }
        return true;
    }

}


运行的结果为:

程序运行结果.png

有人直接逻辑推理出来的吗?在评论那里写下可好,让我学习学习

这个是完整源码 java实现 大数据 Spark 可视化大屏+Kafka+SpringBoot+Vue3 【大数据毕业设计】基于Spark实时社交媒体舆情分析与趋势预测(Java版本+可视化大屏+Kafka+SpringBoot+Vue3) 源码+论文 完整版 数据库Mysql 随着微博、抖音、知乎、小红书等社交媒体平台的快速发展,网络舆情呈现出数据规模大、传播速度快、情绪演化复杂等特点。传统离线批处理方式难以满足舆情监测对时效性的要求,亟需构建一套能够支撑实时采集、流式计算、情感分析与趋势预测的综合系统。本文围绕“基于Spark实时社交媒体舆情分析与趋势预测”课题,设计并实现了一套前后端分离的舆情分析平台。系统后端采用Java语言与Spring Boot框架构建RESTful服务,结合JWT完成管理员身份认证与权限控制;数据处理层引入Spark思想的流式窗口统计与Kafka消息缓冲机制,对社交媒体帖文进行情感倾向识别、热度指数计算和按小时窗口聚合;趋势预测模块基于历史热度序列构建多元线性回归模型,输出未来窗口的热度预测值,并采用RMSE、MAE、MAPE等指标评价预测效果;前端采用Vue3、Vue Router、Pinia、Element Plus与ECharts实现管理后台与数据可视化大屏,支持帖文管理、话题管理、实时舆情查看、趋势对比和个中心维护等功能。数据库选用MySQL,库名为db_social_opinion,核心业务表均以t_前缀命名,覆盖管理员、用户、平台、话题、帖文、实时统计、预测结果与误指标等实体。测试结果表明,系统能够稳定完成舆情事件模拟、实时统计刷新与趋势预测展示,界面日期时间统一采用“2026-11-02 17:25:17”格式,满足本科毕业设计对完整性、规范性与可演示性的要求。本文工作对高校舆情教学实验、中小规模舆情监测系统原型开发具有一定
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值