一些面经(2)---智力题

2023-11-12


一个7分钟沙漏a7,一个4分钟沙漏a4。怎样计时9分钟?


先同时漏a7a4,a4漏完后翻转,和a7剩下的三分钟同时漏,a7漏完后再翻转和a4的一分钟一起漏,a4漏完后a7一端就有一分钟,这时再翻转a7直到漏完,4+3+1+1=9


你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1, W2, · · · , WN。 请你计算一共可以称出多少种不同的重量? 注意砝码可以放在天平两边。


数据结构(普通数组) + 算法(动态规划)。
  [1] 初始化一个 bool 类型的普通数组 a[i][j],i 代表的是“装入前 i 个砝码”,j 代表的是“重量j”,a[i][j] 代表的是 “装入前 i 个砝码后,能否凑成重量为 j 的情况,能凑成的话,值就为 true,否则为 false”。
  [2] 有 N 个砝码,就遍历 N 遍,每遍装入一个新的砝码。在每次遍历中要做 [3] 和 [4] 两件事。
  [3] 首先,继承上一轮的结果。因为对于 “前 i 个砝码能凑成的所有重量的集合” ,那么前 i+1 个砝码一定也能凑到。
  [4] 然后遍历继承上一轮结果的 a[i][j](只有 j 在变),然后我们就去看,在 a[i][j] ==false 的情况下,是否能通过某种手段(代码中的三种)使得 a[i][j] 变为 true。


rand(5)生成rand(7)


只要我们将Rand5 映射到一个能产生更大随机数的Randa,其中a > 7(Randa一定是要满足等概率生成1到a的)
1.Rand5产生1到5的数,减1就产生0到4的数,乘以5后可以产生的数是:0,5,10,15,20。 再加上第二个Rand5()产生的1,2,3,4,5。我们可以得到1到25, 而且每个数都只由一种组合得到,即上述代码可以等概率地生成1到25。
2.因为Rand25会产生1到25的数,而只有1到7时才跳出while循环, 生成大部分的数都舍弃掉了。这样的实现明显不好。我们应该让舍弃的数尽量少, 于是我们可以修改while中的判断条件,让x与最接近25且小于25的7的倍数相比。 于是判断条件可改为x > 21,于是x的取值就是1到21。 我们再通过取模运算把它映射到1-7即可。
int Rand7(){
int x = ~(1<<31); // max int
while(x > 21)
x = 5 * (Rand5() - 1) + Rand5() // Rand25
return x%7 + 1;
}


猎人抓狐狸问题


狐狸有五个一次排开的洞每天轮流住,且相邻两天它会住在相邻的洞里,猎人每天可以去查看一个洞,问需要几天可以确保抓住狐狸?
思路:首先我们给洞编号 1 2 3 4 5
第一天去2号洞。如果2号洞没有抓到狐狸,则第一天狐狸可能在 1 3 4 5号洞
预判:第二天狐狸可能在 2 3 4 5号洞
第二天去3号洞。如果3号洞没有抓到狐狸,则第二天狐狸可能在 2 4 5号洞
预判:第三天狐狸可能在1 3 4 5号洞
第三天去4号洞。如果4号洞没有抓到狐狸,则第三天狐狸可能在1 3 5号洞
预判:第四天狐狸可能在2 4 号洞
第四天去2号洞。如果2号洞没有抓到狐狸,则第四天狐狸可能在4号洞
预判:第五天狐狸可能在3 5号洞
第五天去3号洞。如果3号洞没有抓到狐狸,则第五天狐狸可能在5号洞
预判:第六天狐狸可能在4号洞
第六天去4号洞
一定能抓到狐狸!

对于n个洞的答案:

不论n多大,最坏情况下只需2n−4天就能逮到狐狸,策略是这样的:
若n为奇数,则从第一天开始搜寻的山洞编号为:2, 3, 4, …, n-1, 2, 3, 4, …, n-1
若n为偶数,则从第一天开始搜寻的山洞编号为:2, 3, 4, …, n-1, n-1, n-2, …, 3, 2
不管哪种情况,只需2n−4步即可逮到狐狸。


赛跑问题


一共有25个人参加赛跑比赛,但是只有五条赛道,同时只能保证五个人进行比赛,问至少比赛多少次可以选出前三名。
1、将25个人分成五组,比赛五次,每组选出前三名。计5次。
2、让每一组的第一名进行一轮比赛,选出前三名,设为A1>B1>C1。计1次。淘汰D、E全组
C1最多是第3名,淘汰C2,C3
B1最多是第2名, B2最多是第3名,淘汰B3.
A1一定是第1名,不参与接下来的比赛。
3、这时候,剩下5名选手,进行最后一轮比赛,选出两名,加上A1,共计三位选手。计1次。
所以,至少比赛7次可以选出前三名。

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

一些面经(2)---智力题 的相关文章

随机推荐

  • Unity获取Animtor过渡信息

    Animator切换动画时候 会有一个过渡的过过程 可以通过 AnimatorTransitionInfo transitionInfo animator GetAnimatorTransitionInfo 0 来获取切换状态 Animat
  • postgresql_quick_start

    文章目录 创建数据库 选择数据库 删除数据库 建表 删表 关于模式 模式的增删 和表一起操作 创建用户 示例 所有 开头的命令必须使用 postgresql 自带的可执行程序 postgresql 提供的程序大小写敏感 创建数据库 CREA
  • 2014 新版ITC 重新上传ipa 修改build version

    之前上传ipa的时候 不想改版本号 但是又想重新提交ipa的时候 提交不了 上网查了资料看到以下的解决方法就可以重新提交ipa
  • electron在window7上安装白屏问题

    问题描述 electron5 0 13以上的版本打包win7上需要 NET Framework 4 6 版本及以上版本才可以运行 但是有些win7由于是SP1的系统属于精简版window所以无法安装 NET Framework 4 6及其以
  • 教你如何在Android 6.0上创建系统悬浮窗

    转自郭林的微信公众号 今天周二 又该跟大家分享由我执笔的文章了 从之前我写的deep links 通知栏微技巧这两篇文章中 大家应该能明显体会出什么叫短小精炼 但又很有技术价值的文章 后面我还会坚持分享这种类型的文章 尽量让大家十分钟内就可
  • 华为OD机试 C++ 最快到达医院的方法

    描述 武汉出现了交通封锁 导致大壮在考虑去附近的医院时遇到了难题 大壮住在武汉 他家附近有两家医院 医院A距离他X公里 去这家医院 大壮只能乘坐计程车 车速为M米 分钟 但要等车L分钟 医院B距离他Y公里 但去这家医院 大壮只能选择步行 速
  • neo4j搭建豆瓣电影top250知识图谱踩过的坑

    neo4j 4 0 1 重置neo4j 将安装地址data文件夹中两个文件夹databases和transactions直接删除 再启动neo4j 进入浏览器会回到最开始的输入原始用户名和密码 neo4j neo4j 之前创建的数据库会清空
  • Ubuntu18.04/16.04+RTX2080Ti+docker的深度学习环境配置

    Ubuntu18 04 16 04 RTX2080Ti docker的深度学习环境配置 1 NVIDIA的GPU驱动安装 根据显卡型号去NVIDIA官网下载驱动 官网链接https www nvidia com Download index
  • 小程序更多的手势事件(左右滑动、放大缩小、双击、长按)

    小程序更多的手势事件 左右滑动 放大缩小 双击 长按 前言 一 组件事件的设置 二 左右滑动事件 1 流程图 2 代码示例 三 放大缩小事件 1 流程图 2 代码示例 四 双击事件 1 流程图 2 代码示例 前言 微信小程序提供的原生事件有
  • gnuradio的安装以及安装常见错误

    本文是从纯小白 0基础的出发点上 从概念入手 不仅介绍gnuradio在Linux上的安装流程 及安装时的常见错误 还普及了一些小白需要了解的必备知识 目录 1 虚拟机的安装 2 Linux系统的安装 3 gnuradio的安装 4 安装常
  • Hive数据倾斜的原因及主要解决方法

    数据倾斜产生的原因 数据倾斜的原因很大部分是join倾斜和聚合倾斜两大类 Hive倾斜之group by聚合倾斜 原因 分组的维度过少 每个维度的值过多 导致处理某值的reduce耗时很久 对一些类型统计的时候某种类型的数据量特别多 其他的
  • Java核心——集合(二)

    一 实现类 Java提供了一套实现Collection接口的标准集合类 实现类 其中包含具体类 可直接拿来使用 和抽象类 提供了接口的部分实现 其中抽象类描述如下 图中蓝底部分 AbstractCollection 实现了大部分的集合接口
  • python串口调试助手_python 串口调试工具源码

    实例简介 tkinter的GUI pyserial模块 实例截图 核心代码 if self Status True self ser serial Serial self port get int self baud get timeout
  • Android面试大总结

    面试题 你似乎来到了没有知识存在的荒原 知乎 字节跳动Android面试题目与答案 2020 2020年开春最新面试 字节跳动安卓面试题及答案 已拿到 offer Android面试必备26题 阿里腾讯总结 含答案 Android 面试问题
  • mysql语句添加索引

    参考 mysql索引学习 2 创建索引 修改索引 删除索引的命令语句 mysql语句添加索引 创建或添加索引可以使用如下语句 一 使用ALTER TABLE语句创建索引 语法如下 1 PRIMARY KEY 主键索引 mysql gt AL
  • Burst Balloons(戳气球)(困难)(回溯)(动态规划)

    题目 有 n 个气球 编号为0 到 n 1 每个气球上都标有一个数字 这些数字存在数组 nums 中 现在要求你戳破所有的气球 每当你戳破一个气球 i 时 你可以获得 nums left nums i nums right 个硬币 这里的
  • OpenWrt一些小问题的解决方法

    OpenWrt中文文档并不完善 国内论坛也不太照顾新人 有时遇到问题无从下手 这里整理一些常见错误提示和解决方法 我也是新手整理的不全有问题可以在评论里提出 satisfy dependencies for Cannot satisfy t
  • Layui数据表格

    添加表格容器 设置id 和 lay filter div table table div 2 layui use table function var table layui table 第一个实例
  • Vs打开Qt文件,添加模块时没有可勾选项

    VS2022 QT6 我要使用QVideoWidget作为QMediaCaptureSession的视频输出源 原本在Qt creator中 在工程文件添加QT multimediawidgets即可 但在VS勾选模块时却找不到multim
  • 一些面经(2)---智力题

    一个7分钟沙漏a7 一个4分钟沙漏a4 怎样计时9分钟 先同时漏a7a4 a4漏完后翻转 和a7剩下的三分钟同时漏 a7漏完后再翻转和a4的一分钟一起漏 a4漏完后a7一端就有一分钟 这时再翻转a7直到漏完 4 3 1 1 9 你有一架天平