【被面试官吊打系列】啥,你没说面试要考智力题呀 (上) ?

在这里插入图片描述

你好,我是安然无虞。

文章目录

  • 1. 二进制问题
    • 分金条问题
    • 毒药问题
  • 2. 先手必胜问题
    • 轮流拿石子
    • 抢30的必胜策略
    • Nim游戏
  • 3. 水桶问题
    • 5L和6L的水桶怎么量出3L的水?
    • 3L和5L的水桶怎么量出4L的水?
    • 一个装了10L水的桶,一个7L的空桶还有一个3L的空桶
    • 舀酒问题
  • 4. 计时问题
    • 漏斗计时
    • 烧绳子
    • 蜡烛燃烧
  • 5. 赛马问题
    • 25匹马5条跑道找最快的3匹马
    • 64匹马8条跑道找最快的4匹马
  • 6. 思维发散题:为什么井盖是圆的?

随着现在越来越卷,我们面试的时候,无论是技术岗,还是非技术岗,往往都会遇到一种特殊的题型:智力题。

有一说一,这种题目,有点恶心,有点类似于脑筋急转弯,面试官主要是想考察候选人的思维灵活性。

所以我们不但要刷leetcode,智力题最好也要有个印象,不然一问三不知就怪尴尬的,OK,一起走着吧老铁~
在这里插入图片描述

1. 二进制问题

分金条问题

问:工人给你打工,工作七天可以得到一根金条,这根金条平分成相连的7段,你必须在每天结束的时候给他们一段金条。如果只允许你两次把金条弄断,你如何给你的工人付费?

解答:切两刀,分成1/7,2/7,4/7三段

第一天给1/7;

第二天给2/7,并换回之前的1/7;

第三天给1/7;

第四天给4/7,并换回之前给的1/7和2/7;

第五天给1/7;

第六题给2/7,并换回之前给的1/7;

第七天给1/7.

毒药问题

问:有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药。任何喝下毒药的生命都会在一星期之后死亡。现在你只有10只小白鼠和1个星期的时间,如何检验出哪个瓶子有毒药?

解答:首先一共有1000瓶,2的10次方是1024,刚还大于1000,也就是说1000瓶药品可以使用10位二进制数表示出来。

  • 第一瓶 : 00 0000 0001
  • 第二瓶 : 00 0000 0010
  • 第三瓶 : 00 0000 0011
  • ……
  • 第999瓶: 11 1111 0010
  • 第1000瓶:11 1111 0011

将10只老鼠按照顺序进行编号为ABCDEFGHIJ,代表着从低位到高位的每一个二进制位。

每只老鼠对应一个二进制位,如果该位的数字为1,则让老鼠喝瓶里的药。观察,若死亡的老鼠编号为:ACFGJ这5只老鼠,则对应的编号为10 0110 0101,有毒的药品就是该编号,转为十进制为:613号。

2. 先手必胜问题

轮流拿石子

题目链接:石子游戏

问:你和你的朋友面前有一排石头堆,用一个数组 piles 表示,piles[i] 表示第 i 堆石子有多少个。你们轮流拿石头,一次拿一堆,但是只能拿走最左边或者最右边的石头堆。所有石头被拿完后,谁拥有的石头多,谁获胜。

由你第一个开始拿,注意,石头的堆的数量为偶数,所以你们两人拿走的堆数一定是相同的。石头的总数为奇数,也就是你们最后不可能拥有相同多的石头,一定有胜负之分。

举个例子,piles=[2, 1, 9, 5],你先拿,可以拿 2 或者 5,你选择 2。

piles=[1, 9, 5],轮到对手,可以拿 1 或 5,他选择 5。

piles=[1, 9] 轮到你拿,你拿 9。

最后,你的对手只能拿 1 了。

这样下来,你总共拥有 2 + 9 = 11 颗石头,对手有 5 + 1 = 6 颗石头,你是可以赢的,所以算法应该返回 true。

你看到了,并不是简单的挑数字大的选,为什么第一次选择 2 而不是 5 呢?因为 5 后面是 9,你要是贪图一时的利益,就把 9 这堆石头暴露给对手了,那你就要输了。

解答:这个条件下,先下手必胜。

如果我们把这四堆石头按索引的奇偶分为两组,即第 1、3 堆和第 2、4 堆,那么这两组石头的数量一定不同,也就是说一堆多一堆少。因为石头的总数是奇数,不能被平分。

而作为第一个拿石头的人,你可以控制自己拿到所有偶数堆,或者所有的奇数堆。

你最开始可以选择第 1 堆或第 4 堆。如果你想要偶数堆,你就拿第 4 堆,这样留给对手的选择只有第 1、3 堆,他不管怎么拿,第 2 堆又会暴露出来,你就可以拿。同理,如果你想拿奇数堆,你就拿第 1 堆,留给对手的只有第 2、4 堆,他不管怎么拿,第 3 堆又给你暴露出来了。

也就是说,你可以在第一步就观察好,奇数堆的石头总数多,还是偶数堆的石头总数多,然后步步为营,就一切尽在掌控之中了。知道了这个漏洞,可以整一整不知情的同学了。

当然,「总共有偶数堆石子」和「石子总数为奇数」是先手必胜的前提条件。

抢30的必胜策略

问:抢30是双人游戏,游戏规则:第一个人喊1 或 2,第二个人要接着往下喊一个或两个数,然后再轮到第一个人。两个人轮流进行下去,问喊数字的最佳策略。

解答:尽量喊3的倍数。

倒着看,其实,喊到27时就决定胜负了。

假设A喊了27,B只能喊28或29,下个回合,A一定可以喊到30,也就是说,喊27者必胜。

再倒着看,喊24时就决定胜负了,假设A喊了24,B只能喊25或者26,下个回合A一定能喊27.

同理可以推出:喊3的倍数者必胜。

然后会发现,这个游戏谁先喊,谁一定输。

Nim游戏

这道题的思路跟抢30的必胜策略很相似,游戏规则是这样的:

问:你和你的朋友面前有一堆石子,你们轮流拿,一次至少拿一颗,最多拿三颗,谁拿走最后一颗石子谁获胜。

假设你们都很聪明,由你第一个开始拿,比如现在有 4 颗石子,无论你拿 1 颗 2 颗还是 3 颗,对方都能一次性拿完,拿走最后一颗石子,所以你一定会输。

解答:我们解决这种问题的思路一般都是反着思考。

如果我能赢,那么最后轮到我取石子的时候必须要剩下 1~3 颗石子,这样我才能一把拿完。

如何营造这样的一个局面呢?显然,如果对手拿的时候只剩 4 颗石子,那么无论他怎么拿,总会剩下 1~3 颗石子,我就能赢。

如何逼迫对手面对 4 颗石子呢?要想办法,让我选择的时候还有 5~7 颗石子,这样的话我就有把握让对方不得不面对 4 颗石子。

如何营造 5~7 颗石子的局面呢?让对手面对 8 颗石子,无论他怎么拿,都会给我剩下 5~7 颗,我就能赢。

这样一直循环下去,我们发现只要踩到 4 的倍数,就落入了圈套,永远逃不出 4 的倍数,而且一定会输。

所以本题要尽量避开4的倍数。

3. 水桶问题

5L和6L的水桶怎么量出3L的水?

问:在水资源无限的情况下,5L和6L的水桶怎么量出3L的水?

解答:

  • 6L水桶装满水倒入5L水桶,余下1L水
  • 5L水桶倒空,将6L水桶中剩余的1L水倒入5L水桶
  • 6L水桶再次装满水倒入5L水桶,余下2L水
  • 5L水桶倒空, 将6L水桶中剩余2L水倒入5L水桶
  • 6L水桶再次装满水倒入5L水桶,余下3L水

3L和5L的水桶怎么量出4L的水?

问:在水资源无限的情况下,3L和5L的水桶怎么才能量取4L的水?

解答:

  • 初识时0,5
  • 然后3,2
  • 然后0,2
  • 然后2,5
  • 然后1,4

一个装了10L水的桶,一个7L的空桶还有一个3L的空桶

问:一个装了10L水的桶,一个7L的空桶,一个3L的空桶,怎样变成2个5L?

解答:

  • 初始时10,0,0;
  • 然后7,0,3;
  • 然后7,3,0;
  • 然后4,3,3;
  • 然后4,6,0;
  • 然后1,6,3;
  • 然后1,7,2;
  • 然后8,0,2;
  • 然后8,2,0;
  • 然后5,2,3;
  • 然后5,5,0

舀酒问题

问:据说有人给酒肆的老板娘出了一个难题:此人明明知道店里只有两个舀酒的勺子,分别能舀7两和11两酒,却硬要老板娘卖给他2两酒。聪明的老板娘毫不含糊,用这两个勺子在酒缸里舀酒,并倒来倒去,居然量出了2两酒,聪明的你能做到吗?

解答:

  • 初始0,11
  • 然后7,4
  • 然后0,4
  • 然后4,0
  • 然后4,11
  • 然后7,8
  • 然后0,8
  • 然后7,1
  • 然后0,1
  • 然后1,11
  • 然后7,5
  • 然后0,5
  • 然后5,0
  • 然后5,11
  • 然后7,9
  • 然后0,9
  • 然后7,2

4. 计时问题

漏斗计时

有一个能计时6分钟的小沙漏和一个能计时8分钟的大沙漏,如何计时10分钟?

解答:

  • 两个沙漏同时倒置开始计时,等小沙漏漏完,大沙漏还剩2分钟,这时倒置小沙漏继续计时;
  • 大沙漏漏完小沙漏还剩4分钟,再把大沙漏倒置继续计时;
  • 小沙漏漏完大沙漏还剩4分钟,这时准备工作已经完毕;
  • 等待大沙漏漏完(4分钟)+ 小沙漏(6分钟) = 10分钟。

烧绳子

问:烧一根绳子需要一个小时,现有两条相同的绳子,问如何计时15分钟?

解答:

  • 点燃绳子A的一头,同时点燃绳子B的两头;
  • 绳子B烧完的时候绳子A还剩一半,此时点燃绳子A的另一头开始计时;
  • 15分钟绳子A烧完。

蜡烛燃烧

问:两根蜡烛,燃烧完都需要1小时,问我们怎么确定15分钟是多久?

解答:

跟上题一样:

  • 点燃第一根的一端,第二根的两端。
  • 第二根烧完代表半小时后,点燃第一根另一端,烧完代表15分钟。

5. 赛马问题

25匹马5条跑道找最快的3匹马

问:25匹马5条跑道找最快的3匹马,最少需要跑几次?

解答:最少需要跑7次。

  • 将25匹马分成ABCDE5组,假设每组的排名就是A1>A2>A3>A4>A5, 这里比赛5次
  • 第6次,每组的第一名进行比赛,可以找出最快的马,这里假设A1>B1>C1>D1>E1, D1,E1肯定进不了前3,直接排除掉
  • 第7次,B1 C1 A2 B2 A3比赛,可以找出第二,第三名

img

64匹马8条跑道找最快的4匹马

问:64匹马8条跑道找最快的4匹马,最少需要跑几次?

解答:至少需要跑11次。

**第一步:**全部马分为8组,每组8匹,每组各跑一次,然后淘汰掉每组的后四名(需要比赛8场)

img

**第二步:**取每组第一名进行一次比赛,然后淘汰最后四名所在组的所有马,如下图(需要比赛1场)

img

这个时候总冠军已经诞生,它就是A1,蓝域(它不需要比赛了)。

而其他可能跑得最快的三匹马只可能是下图中的A2,A3,A4,B1,B2,B3,C1,C2,D1,共9匹马

img

**第三步:**只要从上面的9匹马中找出跑得最快的三匹马就可以了,但是现在只要8个跑道,怎么办? 那就随机选出8匹马进行一次比赛吧(需要比赛一场)

**第四步:**上面比赛完,选出了前三名,但是9匹马中还有一匹马没跑呢,它可能是一个潜力股啊,那就和前三名比一比吧,这四匹马比一场,选出前三名。最后加上总冠军,跑得最快的四匹马诞生了!!!(需要一场比赛)

最后,一共需要比赛的场次:8 + 1 + 1 + 1 = 11 场

6. 思维发散题:为什么井盖是圆的?

在这里插入图片描述

解答:

  • 原因1:圆井盖更容易搬运。

我们知道,井盖在生产出来后,需要运输到相应的位置,而且由于井盖比较重,所以在搬运的时候,非常费力气。井盖做成圆形后,在平坦的地方就可以滚着走,并且在调整井盖位置的时候,圆形的东西,更加容易翻滚。所以把井盖做成圆形更加容易搬运。

  • 原因2:圆井盖不易损坏,且节省材料

很多下水井都设置在马路上,井盖覆盖在下水井上面,通常要承受路面车辆和行人带来的压力。而汽车运行在公路上,压力非常大,井盖在设计以及用料上都要承受巨大的压力,才能保证安全。

当然井盖也有方的,从物理上的力学定律来看,圆形物体边缘受力均匀,比同等面积其它形状的物体更能承受压力,而且边缘不容易破损。所以我们现在看到圆形的井盖,其实有着很大的科学道理。

  • 原因3:井盖设计成圆形,更能和下水道契合。

同时,下水道使用的都是圆形的管道。这种圆形管道,更有利于污水通过,为了契合下水道的形状,所以井盖也设计成圆形。圆形井盖能完美地契合下水道,这有利于节约成本,提高下水道的使用效率。这也是通过长期科学验证得到的正确做法。

  • ……
遇见安然遇见你,不负代码不负卿。
谢谢老铁的时间,咱们下篇再见~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/166537.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA代码视频转GIF(亲测有效)

1.说明 本次使用的是JAVA代码视频转GIF&#xff0c;maven如下&#xff1a; <dependency><groupId>ws.schild</groupId><artifactId>jave-nativebin-win64</artifactId><version>3.2.0</version></dependency><dependency&…

SpringBoot前后端分离整合cas(客户端)

SpringBoot前后端分离整合cas&#xff08;客户端&#xff09; cas认证详细流程&#xff1a; 前后端分离&#xff1a;项目前端使用nginx启动&#xff0c;后端是springBoot服务&#xff1b; nginx可以统一管理Cookie&#xff0c;避免出现跨域问题。 添加依赖 <dependency&g…

C++中的函数重载:多功能而强大的特性

引言 函数重载是C编程语言中的一项强大特性&#xff0c;它允许在同一个作用域内定义多个同名函数&#xff0c;但这些函数在参数类型、个数或顺序上有所不同。本文将深入探讨函数重载的用法&#xff0c;以及它的优势和应用场景。 正文 在C中&#xff0c;函数重载是一项非常有…

【 Docker: 数据卷挂载】

背景 Docker只提供了容器运行的必备依赖&#xff0c;但是一些编辑等操作的依赖是不支持的&#xff0c;如vi操作容器内部文件、将静态资源拷贝到容器内来等。 docker pull nginx docker run -d -p 81:80 --namemynginx -v D:/docker/nginx/www:/usr/share/nginx/www -v D:/dock…

C# OpenCvSharp 去除文字中的线条

效果 中间过程效果 项目 代码 using OpenCvSharp; using System; using System.Drawing; using System.Windows.Forms; using static System.Net.Mime.MediaTypeNames;namespace OpenCvSharp_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent…

Jmeter_逻辑控制器

逻辑控制器 控制取样器执行顺序的组件实现(分支 循环) 分类 1、如果(if) 控制器 分支实现 2、forEach控制器 循环往复实现 3、循环控制器 循环往复实现 如果(if) 控制器 需求1:测试计划中定义一个 http 请求访问百度&#xff0c;但是该请求不是无条件执行的&#xff0c;…

亚马逊云科技Zero ETL集成全面可用,可运行近乎实时的分析和机器学习

亚马逊云科技数据库、数据分析和机器学习全球副总裁Swami Sivasubramanian曾指出&#xff1a;“数据是应用、流程和商业决策的核心。”如今&#xff0c;客户常用的数据传输模式是建立从Amazon Aurora到Amazon Redshift的数据管道。这些解决方案能够帮助客户获得新的见解&#x…

kubernetes集群编排(9)

目录 helm 部署helm 封装chart包 上传chart到OCI仓库 部署wordpress博客系统 helm部署storageclass helm部署ingress-nginx helm部署metrics-server kubeapps 更新 helm 部署helm 官网&#xff1a; Helm | 快速入门指南 https://github.com/helm/helm/releases [rootk8s2 ~]# t…

97 只出现一次的数字

只出现一次的数字 题解1 异或的应用&#xff08;判断出现次数是奇偶&#xff09; 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题…

Antv/G2 图表背景实线改为虚线

坐标轴 - Axis 文档 绘图属性 - ShapeAttrs 文档 图表背景实线改为虚线代码示例&#xff1a; chart.axis("value", {grid: {// 背景网格刻度线样式line: {style: {lineWidth: 0.5,lineDash: [5, 2], //虚线},},}, });未设置前页面效果&#xff1a; 添加代码配置&…

第十八章总结

一.Swing概述 二.Swing常用窗体 1.JFrame窗体 创建一个不可见、具有标题的窗体&#xff0c;关键代码&#xff1a; JFrame jfnew JFrame("登陆系统"); Container containerjf.getContentPane(); 在创建窗体后&#xff0c;先调用getContentPane()方法将窗体转…

工业镜头接口类型

现有产品主要有以下接口 1、C:最常见的工业相机接口&#xff0c;受限于接口物理尺寸大小&#xff0c;最大靶面目前是4/3” 2、M42:M421.0,2k和4k线阵相机使用 3、M58S:M580.75,大靶面相机使用&#xff0c;可以转C(限于CH080相机&#xff0c;靶面4/3”)&#xff0c;可以转F,可以…