一个程序员都应该熟悉的故事

首先读者必须原谅作者把有意思的题目看做故事。。。。。害羞

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

上面的题目熟悉的读者应该不太少,网上分析的也有,但是鉴于作者接触的第一个C语言问题就是他,而作者所接触的第一个技术领域就是C语言,所以以这个故事开始还是颇有意义的,好,让我们正式开始。

首先,我想问读者,这里小白鼠的数量是随便给的吗?恩,我听到了,当然不是!我们可以简单算一下,便知道1000转换为二进制为1111101000(十位)。我们如果对每一个瓶子都按二进制进行编码,可知顺序为0000000001-1111101000,然后我们再让小白鼠排成一行,共十排(见下图),我们这样规定如果哪个瓶子哪个位为1,就让对应排的小白鼠喝它。比如第1000瓶为1111101000那就让第1,2,3,4,5,7排的老鼠去喝它,第888瓶为1101111000那就让第1,24,5,6,7排的老鼠去喝它。我们让这样的操作对1000个瓶子都做一遍。


然后,就等咯。。。

一星期以后,可怜的小白鼠就开始死亡了,我们可以从他的死亡行数,比如第2,5,6,7,8行小白鼠死了,我们可以知道一定是第79号瓶子害的(第一次看的话,需要想一会才能理解原因,想想他们的对应性,而且这种对应性绝不会重复生气)。


我们可以从中得到些什么启发呢?首先小白鼠很可怜,然后就是二进制的魅力咯,还记得作者刚开始接触计算机领域时,就曾经怨恨过,计算机采用二进制编码的复杂性,但是随着学习的深入,才逐渐发现先人的智慧,的确大有可取之处。在这题中我们可以知道虽然瓶子的数量较多,有1000个,然而把他们用二进制排列,只需要十位就可以不重复了,想来也是一件十分神奇的事情(如果题目没有给出小白鼠的数目,只提到要用最少的小白鼠数目,找出带毒瓶,你会想到需要多少小白鼠呢,作者当年想到的是999只,是不是很白痴大笑)。


注:以上内容,纯属作者所想,如有雷同,纯属致敬,若广大读者有更好的表述看法或发现了文章内的错误,敬请指教微笑


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 优秀的程序员应该具备以下知识: - 熟练掌握至少一种编程语言,并能灵活运用 - 熟悉常用的算法和数据结构 - 理解计算机系统的工作原理和底层技术 - 熟悉软件工程的基本原理和实践 - 拥有良好的问题解决能力和代码组织能力 - 具有良好的沟通能力和团队协作精神 - 对新技术和发展趋势有兴趣并能够不断学习和提高. ### 回答2: 一个优秀的程序员应该具备以下几方面的知识。 首先,他应该具备良好的计算机基础知识。这包括了操作系统、数据结构与算法、计算机网络、数据库等方面的内容。这些基础知识能够帮助他更好地理解程序运行的原理,并能够在编写代码时作出更优化的选择。 其次,一个优秀的程序员应该对编程语言有深入的了解。他应该熟悉至少一种常用的编程语言,并对其语法、特性和使用方法能够熟练掌握。此外,他还应该具备学习新语言的能力,以适应不同项目的需要。 此外,一个优秀的程序员应该具备系统分析和设计的能力。他应该能够根据项目需求进行系统分析,将需求转化为具体的软件设计,并编写出高质量的代码。他还应该了解软件开发中的常用设计模式和架构思想,以确保程序具有良好的可扩展性和可维护性。 除了技术知识,一个优秀的程序员应该具备良好的沟通和团队合作能力。在项目中,他需要与其他开发者、测试人员和用户进行有效的沟通,并能够在团队中发挥积极的作用。 最后,一个优秀的程序员应该具备持续学习的意识。由于科技的不断发展,编程领域的知识也在不断更新。一个优秀的程序员应该保持学习的热情,并不断跟进新技术和新发展,以保持自己的竞争力。只有不断学习,才能在日益激烈的竞争中保持领先地位。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值