独立思想是最宝贵的

多写原创的文章
随笔 - 15, 文章 - 0, 评论 - 78, 阅读 - 49045
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

网上以讹传讹的逻辑推理题:电影票问题

Posted on   漂流的鱼  阅读(2325)  评论(2编辑  收藏  举报

      有一道买电影票的问题网上发布的答案都是错误的,误人子弟,却没有人指正出来,余甚感痛心。在此写出我的解法。

      题目:有2n个人排队进电影院,票价是50美分。在这2n个人当中,其中n个人只有50美分,另外n个人有1美元(纸票子)。愚蠢的电影院开始卖票时1分钱也没有。问: 有多少种排队方法 使得 每当一个拥有1美元买票时,电影院都有50美分找钱注: 1美元=100美分拥有1美元的人,拥有的是纸币,没法破成2个50美分

      网上的答案一般是:本题可用递归算法,但时间复杂度为2的n次方,也可以用动态规划法,时间复杂度为n的平方,实现起来相对要简单得多,但最方便的就是直接运用公式:排队的种数=(2n)!/[n!(n+1)!]。   如果不考虑电影院能否找钱,那么一共有(2n)!/[n!n!]种排队方法(即从2n个人中取出n个人的组合数),对于每一种排队方法,如果他会导致电影院无法找钱,则称为不合格的,这种的排队方法有(2n)!/[(n-1)!(n+1)!](从2n个人中取出n-1个人的组合数)种,所以合格的排队种数就是(2n)!/[n!n!]-(2n)!/[(n-1)!(n+1)!]=(2n)!/[n!(n+1)!]。

     

       我们用简单的举例就可以判断这个答案是错误的,设N=2, a1,a2是有50美分的人,b1,b2是有1美元的人,那么总共有8种排队方法:

a1  a2  b1  b2

a1  a2  b2  b1

a1  b1  a2  b2

a1  b2  a2  b1

 

a2  a1  b1  b2

a2  a1  b2  b1

a2  b1  a1  b2

a2  b2  a1  b1

       与公式计算结果不符,公式是错误的。我的解法是这样:

       首先电影院让50美分和1美元的人分成2堆,从每堆里面各抽出一个人结成一对,这样总共有N*N种队,这个很简单。

       这样每队里面都有一个50美分和1美元的人,把这2个人随便插入到票房前,只要保证50美分的人排在1美元的人前面即可。这里我用一个祖玛游戏来说明

       

      

       把2个人像球一样射击出去随便插队,把N个队伍射击出去的组合有N!的种,所以总的排队情况有N*N*N!种,当N=2时共8种与我们上面举例的数量是一致的。
       N=3的情况有54种,我没有写出来例子来,当然仅用N=2来验证是不够严密的。

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示