腾讯笔试题:猜字游戏---猜1-100之间一个数字,最少多少次?第一次猜的数是几?

2023-11-04

题目:
A、B两人玩猜字游戏,游戏规则如下:
A选定一个 [1,100]之间的数字背对B写在纸上,然后让B开始猜;
如果B猜的偏小,A会提示B这次猜的偏小;
一旦B某次猜的偏大,A就不再提示,此次之后B猜的偏小A也不会再提示,只回答猜对与否。
请问:B至少要猜( )次才能保证猜对?在这种策略下,B第一次猜测的数字是( )。
解析:
假设至少要猜x次。
第一次猜的数是y(y>=1并且y<=x)。(如果y>x,如果没有提示,那么无法用x次保证猜对。)
如果没有提示,说明猜的偏大,则从y往下一个一个猜(至多y-1次);
如果提示偏小,第二次猜的数为y+(x-1),
如果没有提示,说明猜的偏大,则从y+(x-1)往下一个一个猜(至多x-1次),如果提示偏小,第三次猜的数为y+(x-1)+(x-2),
如果没有提示,说明猜的偏大,则从y+(x+1)+(x-2)往下一个一个猜(至多x-2次),如果提示偏小,第四次猜的数为y+(x-1)+(x-2)+(x-3),
如果没有提示,说明猜的偏大,则从y+(x-1)+(x-2)+(x-3)往下一个一个猜(至多x-3次),如果提示偏小,则第五次猜的数为y+(x-1)+(x-2)+(x-3)+(x-4),
依次类推....
最后得到: 
y+(x-1)+(x-2)+(x-3)+...+1>=100  (1)
1=<y<=x (2)
对方程(1)的解释:
因为猜的次数为x次,第x次猜的数为y+(x-1)+(x-2)+(x-3)+...+1,如果这个数小于100,此时出现两种情况:1)没有提示,说明猜的数偏大,此时不需要满足这个方程。2)提示偏小,说明猜的数偏小,但是这时已经猜了x次,用完了所有的机会,无法继续猜比y+(x-1)+(x-2)+(x-3)+...+1更大的数了。因为数的范围是[1,100],只要y+(x-1)+(x-2)+(x-3)+...+1>=100就不会出现第二种情况了。
题目要求至少要猜多少次才能保证猜对。根据方程1,为保证x最小,y应该取得最大值,即y=x,此时y+(x-1)+(x-2)+(x-3)+...+1=x+(x-1)+(x-2)+(x-3)+....+1=x(x+1)/2>=100
解方程得到x>=13.650971698...,即至少要猜14次,才能保证猜对。
问题的第二问:在这种策略下,B第一次猜的数字是多少?
上面提到,要保证x最小,y应该取最大值,即y=x。实际解方程x(x+1)/2>=100得到x>=13.650971698...,由于x必须为整数,所以x取14。由于x取14,比实际的值要大,所以y不一定要等于14。将x=14带入方程y+(x-1)+(x-2)+(x-3)+...+1>=100得到y>=9,所以y的取值范围是9到14之间的任意数。也就是说第一次猜的数可以是9到14之间的任意数。
猜数序列:(一直提示偏小的猜数序列)
9、22、34、45、55、64、72、79、85、90、94、97、99、100
10、23、35、46、56、65、73、80、86、91、95、98、100
11、24、36、47、57、66、74、81、87、92、96、99、100
12、25、37、48、58、67、75、82、88、93、97、100
13、26、38、49、59、68、76、83、89、94、98、100
14、27、39、50、60、69、77、84、90、95、99、100
 
----------------------------------------------------------------------------------------------------------------------------------------
A、B两人玩猜字游戏,游戏规则如下:
A选定一个 [1,100]之间的数字背对B写在纸上,然后让B开始猜;
如果B猜的偏小,A会提示B这次猜的偏小;
一旦B某次猜的偏大,A就不再提示,此次之后B猜的偏小A也不会再提示,只回答猜对与否。
请问:B至少要猜( )次才能保证猜对?在这种策略下,B第一次猜测的数字是( )。
 
首先阅读题目,一个很重要的信息点就是: 一旦B某次猜的偏大,A就不再提示,此次之后B猜的偏小A也不会再提示,只回答猜对与否 。如果没有这个条件,或者说改变这个条件,改为: 如果B猜的偏大,A会提示B这次猜的偏大 那么相信大家都会给出答案,那就是用二分法,只需要7次就可以保证猜对了。
但是现在的条件变了,如果B猜的偏大,那么不提示,所以我们得出结论就是:如果猜的偏大,只能一个一个往下猜。答案在下面鸡这个题目里面。
标准答案是14次,第一个数选择 9-14中任意一个猜,假设第一个数猜10,依次为23,35,46…

先说答案:猜测序列为14, 27, 39, 50, 60,69, 77, 84, 90, 95, 99,哪一次偏大了,就在该数与上一个数的区间一个个猜,最多13次一定能猜到。 

如何得到上面这个答案呢?其实这道题跟google那道100层楼丢玻璃球问题是一模一样的,只不过换了一种说法而已。下面讲讲解题思路。 

刚一看到这道题,熟悉二分查找的同学肯定马上想到要用二分查找来猜,第一个猜50,第二个猜25或者75……可是这样有一个问题,传统的二分查找是需要每次都知道是偏大还是偏小的,但这里一旦偏大,就再也得不到这个信息了。这就导致了在这里如果继续使用这种类似二分查找的方法最坏情况下猜测次数分布不均匀。比如,如果猜50,偏大了,那只能把50以内的挨个猜一遍,需要50次;但如果偏小了,那再猜75,若偏大,此时只需要在(50,75)之间挨个猜一遍,共1+1+24=26次;显然,偏大的情况越晚出现,需要的总次数越少。这就是最坏情况总猜测次数分布不均匀的体现。 

直觉告诉我们,要使得总猜测次数最少,那就让最坏情况的猜测次数分布均匀即可。假设最多猜测k次,那么第一个猜的数字应该是k+1,因为若偏大了,则逐一把k, k-1, ……2的共k-1个数猜一遍,最坏的情况是都没猜中,则1必定是正确结果;若偏小了,则继续按照下面讲的方式猜。

若偏小了,则第二个猜的数字x应该是什么呢?这就要使得若第二次猜偏大了的话,必定能把总共的猜测次数也控制在k次,因此第二个猜的数x跟第一个猜的数k-1之间要间隔k-1个数,因为这样的话,即使第二个数偏大了,则逐一把x-1,x-2,……k+2的共k-2个数猜一遍,必定能得到答案。因此第二个猜的数字x为2k。

依此类推,要把100覆盖,则可以列出不等式:(k+1) + k + (K-1) + …… + 2 + 1 >= 100,解得k >= 13(取整之后)。 


下面还有一道类同的鸡蛋题:
  1. 假设你有2个鸡蛋,你现在想知道这些鸡蛋的硬度。
  2. 你家住在120层高的大楼里,现在要在这座大楼上测试鸡蛋的硬度。
  3. 每个鸡蛋的硬度相同,鸡蛋的硬度定义为:如果鸡蛋从第m层上掉
  4. 下来没有破裂,而从第m+1层上掉下来就破裂了,那么这个鸡蛋的
  5. 硬度就是m。某个鸡蛋如果在实验中破裂了就永远的损失了。要求
  6. 提供一种方案,在最坏情况下做最少需要最少次数的实验即可把鸡
  7. 蛋的硬度检验出来?

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

腾讯笔试题:猜字游戏---猜1-100之间一个数字,最少多少次?第一次猜的数是几? 的相关文章

  • Ubuntu torch.cuda.is_available() 返回 False情况

    如果Ubuntu20 04 出现torch cuda is available 返回 False情况 解决方法 重新安装Pytorch Ubuntu20 04 CUDA 11 4 Pytorch配置安装 conda conda create
  • Hibernate 自动创建表

    前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住分享一下给大家 点击跳转到教程 1 在 hibernate cfg xml 添加这句话 可以自动生成数据表
  • 开放集识别的最新进展总结(源于Recent Advances in Open Set Recognition: A Survey)

    摘要 在现实的识别 分类任务中 由于受到各种客观因素的限制 在训练一个识别器或分类器摘 0 摘要 原因与场景 在现实的识别 分类任务中 训练模型的时候可能并没有所有类别的训练集 因此 这样训练出来的模型在没有出现过的类出现时 一般会失效 解
  • 中国科学院大学工程管理与信息技术学院 2014年招收以下八个领域在职工程硕...

    中国科学院大学工程管理与信息技术学院2014年招收以下八个领域在职工程硕士 欢迎广大考生报考 一 专业领域介绍 招生领域 研究方向 学费 报考条件 学位 证书 学习方式
  • 数据结构与算法——栈的实现及模拟

    目录 一 栈的原理 二 栈的实现 1 栈的定义 2 栈的初始化 3 入栈 4 出栈 5 获取栈顶元素 6 栈的大小 7 判断栈是否为空 8 栈的销毁 一 栈的原理 堆栈 英语 stack 又称为栈或堆叠 是计算机科学中的一种抽象资料类型 只
  • Kafka核心设计与实践原理总结:进阶篇

    kafka作为当前热门的分布式消息队列 具有高性能 持久化 多副本备份 横向扩展能力 我学习了 深入理解Kafka 核心设计与实践原理总结 一书后 对其中主要的知识点进行了总结 便于理解和掌握kafka的原理和应用 在这里分享出来 希望也能
  • es常用curl命令

    说明 仅记录实验室测试过程 不作为官方文档使用 可能会有很多地方未能验证 因此无法进行技术兜底 需使用方多加验证测试 涉及到高危需走变更 目前测试版本均为651及以前版本 命令样例基于安全模式 如果是在非安全模式下 将命令中的参数 tlsv
  • .Net Core下简单的JWT黑名单中间件

    自从JWT认证方式在互联网上蔓延后 Session认证方式就被挤掉了一大半的生存空间 这里我们不讲JWT与Session两种方式的优缺点 我们只讲如何通过JWT的黑名单来阻止某些Token的登录 设置黑名单 也就是说要将Token写入某个存
  • gRPC:以 C++为例

    文章目录 1 gRPC 环境搭建 1 1 安装 cmake 1 2 安装 gcc gdb 1 3 安装 gRPC 1 4 protobuf 安装 1 5 测试环境 2 1 grpc 同步 2 1 定义服务 2 2 gRPC 服务端 2 3
  • 通讯录的实现

    ifndef TONGXUNLU H define TONGXUNLU H define MAX NAME 20 define MAX PHONE 11 define MAX PEO 1000 typedef struct PeoInfo
  • python肢体识别线条_【HUSKYLENS二哈识图】micro:bit视觉识别入门教程——06循“轨”蹈矩的麦昆...

    点击上方 蘑菇云创造 可以订阅哦 循 轨 蹈矩的麦昆 功能介绍 本项目利用 HuskyLens 的巡线功能 让麦昆 plus 按照地面上的线路轨道欢快地蹦跶 材料清单 知识园地 如果我们要让小车机器人按照地面上的线条移动 就需要一些传感器来
  • SentencePiece,subword-nmt,bpe算法

    BPE Byte Pair Encoding 双字节编码 2016年应用于机器翻译 解决 集外词 OOV 和罕见词 Rare word 问题 论文题目 Neural Machine Translation of Rare Words wit

随机推荐