我时不时地会给我的朋友和同事一些难题。我把这些称为咖啡时间的挑战。题目被设计成很小的,但在短暂休息时要反复考虑的题目。 这些都是典型的不难的题目,并且通常都有多种解决方案。有时,人们用铅笔、纸和数学首要原则来解决这些问题。此外,人们也会通过写正则表达式、 LINQ、Perl或Python脚本来解决*。解决方式有时优雅,有时用蛮力,这里并没有所谓正确或错误的方法,只要得到的是一个正确的答案。 *我喜欢使用VB6,只是因为我能够用这个! 我尽量选择不涉及聪明“陷阱”或“技巧”的难题。这类型的题目对于那些知晓其中秘密的人而言是微不足道的,同时再学习其中的技巧时,也给人留下失望的感觉。选择的这些难题都是可自描述的,不需要外界知识就能完成。 一个好的咖啡时间的挑战是,你需要去找的东西是立即可以理解的,而你面临的挑战是如何找到这个答案。 其中有些题目是我自己想出来的,但许多都不是,大部分是我从自己看到的一些想法中受到启发或复制而来的。这些题目在我的朋友和同事间颇为流行,因此,我想在我的博客上分享一些。 以下是精选的我最近的咖啡时间的挑战。对于其中的一些题目,我提供了提示,同时,所有题目我都给出了解决方案。 我提供了解决方案,因此如果你试图重新解决,你就可以来验证答案,不过我没有提供任何代码。解决这些难题的乐趣就在于写代码,而不是答案。这些乐趣不是来自得到了正确的答案,而是来自你能够写代码或脚本来得到正确的答案。 我并不是说这些都是很好的编程面试题,但我会说,如果你不能写代码来解决类似下面的那些难题,你应该认真考虑转行了:) 顺便说一句,你知道你一生花了多少钱在咖啡上吗?
1) 两基数挑战:找到三个数X、Y、Z,使以10为基数的XYZ,等于以9为基数的ZYX。 下方是提示:(文字颜色为白色,选中下一行即可查看)
2) 一百万挑战:将 1,000,000 写成两个数的乘积,两个数都不包含零。
3) 最大的数 挑战:用数字0-9 (共10个数字)来创建两个数字。当这两个数相乘时,能得到的最大结果是多少?
4) 恰好1/3挑战:将数字 1-9 排列成一个值,恰好等于1/3的简分数。没有其他数学符号,只是连接部分一些数字做分子,一些数字做分母。
5) 三个骰子挑战:摇三个骰子,将得到的三个数相乘。结果是奇数的概率是多少?
6) Word文档挑战:我打开一个Word文档,然后输入1-10000
的所有数字,用空格分隔(我没有使用任何“数千”标点符号,只是原始数据)。然后,我女儿过来使用搜索和替换,并将所有数字“0”替换为空格。如果我现在
计算文档中所有数字的总和,那会是多少?(任何被一个或多个空格分隔的数都是一个独特的数)
7) 腿挑战:一个房间里混杂有人和狗。里面有72个头 ,200条腿。有多少只狗在这个房间里?(没有诡计,没有染色体异常,没有残疾……)
8) 一,二,三挑战:只使用一个1,一个2和一个3(没有拼接的数字)及任何组合你想要的数学符号(加、减、乘、除、括号、指数、阶乘、平方根……)。写出一个方程,使其结果为19。
9) 一,七挑战:如上题,如何只使用一个1和一个7使方程式结果为71?(同样,没有拼接的数字,或者说这样是微不足道的!) |