面试题:在一个黑暗的房间,有人塞给你一叠牌,有 N 张面朝上,其余的面朝下。你看不见牌,怎样才能把牌分成两堆,让每堆面朝上的牌数目相同呢?

求答案及详细推理过程。

先数出 N 张牌,并将其翻转,剩下的是另一堆。这两堆牌中,面朝上的牌数目相同。
推理过程:
这道谜题流行于摩根大通。现在,你可以说拿出手机来照亮,显然是合乎情理的。但事实上,这道谜题的出现时间早于手机,可以不用看牌就解决。或许可以从观察以下这些项目入手:
● 任意把牌分成两等份的做法行不通,除非你运气超级好。所有面朝上的牌都可能分在同一堆里。
● 问题中并未要求两堆牌要相等,它只要求面朝上的牌数目相等。
● 你可以翻转牌面。当然,你无法判断所翻的牌是面朝上还是面朝下。
预期的答案是这样:你从这叠牌的最上面数出 N 张牌,并将其翻转。这就是一堆,桌上剩余的牌是另一堆。
以下是它的运作原理。你数出的 N 张牌里会有任意数目的牌面朝上,从 0 到 N 都有可能。假设翻转之前有 f 张面朝上的牌,翻转会使每一张面朝上的牌面朝下,而面朝下的牌变成面朝上。因此,翻转之后,这堆牌里有 N - f 张面朝上的牌。在桌上剩下的另一堆牌里,也有( N - f )张面朝上的牌。因此,与你刚才翻转的那堆牌里面朝上的牌数目相等。

把牌分成两堆,让每堆面朝上的牌数目相同相关推荐

  1. 逻辑题:给一个瞎子52张扑克牌,并告诉他里面恰好有10张牌是正面朝上的。要求这个瞎子把牌分成两堆,使得每堆牌里正面朝上的牌的张数一样多。瞎子应该怎么做?

    一道很有意思的逻辑推理题,第一次遇到还是挺难以理解这个题的解题思路的,容易陷入误区,下面是我的个人解析思路: 题目:给一个瞎子52张扑克牌,并告诉他里面恰好有10张牌是正面朝上的.要求这个瞎子把牌分成 ...

  2. 将一组数组尽可能均匀的分成两堆,使两个堆中的数的和尽可能相等

    文章目录 将一组数组尽可能均匀的分成两堆,使两个堆中的数的和尽可能相等 1,程序简介 1),例如,你有下列n=8 个口袋妖怪卡片: 2),经过大量的工作,你发现你可以用下面的方法来划分卡片: 3),输 ...

  3. Python每日一练第5天——将一组数尽可能均匀地分成两堆,使两个堆中的数的和尽可能相等

    每日一练-做题 麦克叔叔去世了,他在遗嘱中给他的两个孙子阿贝和鲍勃留下了一堆珍贵的口袋妖怪卡片.遗嘱中唯一的方向是"尽可能均匀地分配纸牌的价值".作为Mike遗嘱的执行人,你已经为 ...

  4. 面试题:一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组

    面试题:一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组 思路如下:由题意可知存在两种操作,1.摸牌:2 ...

  5. 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组

    题目:一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手上没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组.(题目来源于一篇知乎上的文章) 思路: 在原牌堆 ...

  6. 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手里没有牌.最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组

    研究一下这个面试题特此记录,题目:一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手里没有牌.最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组. 第一种:逆推一下 ...

  7. 22-09-02 西安 JVM 类加载器、栈、堆体系、堆参数调优、GC垃圾判定、垃圾回收算法、对象的finalize机制

    这篇文章不少地方都截图了宋红康老师的课件,实在他jvm这块讲的真好.连接地址如下: 尚硅谷宋红康JVM全套教程(详解java虚拟机)_哔哩哔哩_bilibili JVM入门 1.JVM结构图 JVM是 ...

  8. 算法笔记-堆相关、堆的定义、大小根堆、算法程序实现、堆的算法题、C#写法

    内容概述 1,堆结构就是用数组实现的完全二叉树结构 2,完全二叉树中如果每棵子树的最大值都在顶部就是大根堆 3,完全二叉树中如果每棵子树的最小值都在顶部就是小根堆 4,堆结构的heaplnsert与h ...

  9. LeetCode Find K Pairs with Smallest Sums(大根堆、小根堆)

    问题:给出两个有序数组nums1,nums2,要求从两个数组中各取一个数,组成一对数据,输出和最小的k对 思路:方法1使用大根堆,当堆中元素个数小于k时,直接入堆.否则比较当前数据对与堆顶的元素,如果 ...

最新文章

  1. 点击按钮显示谷歌地图
  2. Android Material Design :LinearLayoutCompat添加分割线divider
  3. 【Verilog语法】读文件
  4. Android 服务(Service)
  5. python标签打印工具_NiceLabel Designer 2017条码标签打印软件
  6. 嵌入式电路设计(物联网esp32最小电路设计)
  7. Android 自定义UI-垂直方向的SeekBar
  8. MySQL-高并发优化
  9. 第七十节,css选择器
  10. AD09导出光绘文件(Gerber)
  11. 左耳朵耗子:996不是福气,但努力就会成功么?
  12. 【网站模板】第01期—15套免费网站后台管理模板
  13. 计算机化学试题,08计算机化学试卷yuanj.doc
  14. 时序例外_Timing Exceptions_Min/Max Delays(set_max_delay/set_min_delay)
  15. 【论文阅读】时间序列中的变量是一张知识图谱
  16. 信息系统面临的安全风险
  17. LayaAir引擎放弃Canvas API,打造次世代3D引擎与云游戏引擎,提供AI赋能!
  18. 鼠标滚轮失灵解决方法2种实测
  19. 照片美化和处理控件ColorSwap详细介绍
  20. VBA批量处理PPT中图片尺寸

热门文章

  1. android 耳机监听权限,android 耳机监听
  2. ibaanalyzer使用教程_ibaanalyzer中文手册
  3. 信息安全-网站安全需求分析与安全保护工程(一)
  4. 企业微信收款码快速开通方法
  5. 【WAF剖析】——sql注入之bypass深度剖析
  6. javascript中的三角函数和反三角函数
  7. bzoj3238 [ AHOI2013 ] --后缀自动机
  8. matlab模糊控制图怎么导出_使用MATLAB生成模糊控制的离线查询表
  9. 愚人节的一天(快乐+2)
  10. Day374.shiro授权Shiro+jsp整合Springboot -Shiro