趣题:在指定形状的棋盘内放置n个相同的图形

上个月Erich Friedman的Math Magic提出了这样的问题:
给定一个指定形状的棋盘,给定一个大于2的整数n,找出一个面积最大的图形S使得n个S能够不重叠地装进这个棋盘里。
问题提出之后得到了不少有趣的构造,这些构造是否为最优解还有待进一步证明。

 
由三个格子组成的棋盘共有两种本质不同的形状。“长条形”已经不用多考虑,“拐角形”中n=2, 3, 6时的最优解也是非常显然的。拐角形棋盘是可以分成四等分的。但是,在这个棋盘中放置5个相同的图形就没那么容易了。已知的最优方案占据了整个棋盘约0.959的面积。放置7个相同的图形研究起来更困难一些。已知最优解为0.956。

      

Read more…

趣题:寻找出现了奇数次的数

1. 给你n个数,其中有且仅有一个数出现了奇数次,其余的数都出现了偶数次。用线性时间常数空间找出出现了奇数次的那一个数。
2. 给你n个数,其中有且仅有两个数出现了奇数次,其余的数都出现了偶数次。用线性时间常数空间找出出现了奇数次的那两个数。

 
 

1. 从头到尾异或一遍,最后得到的那个数就是出现了奇数次的数。这是因为异或有一个神奇的性质:两次异或同一个数,结果不变。再考虑到异或运算满足交换律,先异或和后异或都是一样的,因此这个算法显然正确。

2. 从头到尾异或一遍,你就得到了需要求的两个数异或后的值。这两个数显然不相等,异或出来的结果不为0。我们可以据此找出两个数的二进制表达中不同的一位,然后把所有这n个数分成两类,在那一位上是0的分成一类,在那一位上是1的分到另一类。对每一类分别使用前一个问题的算法。

题目来源:http://groups.google.com/group/pongba/browse_frm/thread/f4a080edbe3ce0e1

Read more…

趣题:空间四边形外切于给定球,求证四切点共面

    多年以前,要想进入莫斯科国立大学的数学系,你必须通过四项入学考试;头两个都是数学考试,一个笔试,一个面试。在面试中,学生和考官都是一对一的,考官可以自由向学生提出任何他喜欢的问题。那时,为了筛选出他们不想要的应试者(主要是犹太人),很多考官都会出一些题目描述简单有趣、解答过程极其巧妙而又出人意料的问题。这些问题极具杀伤力,民间戏称其为“棺材问题”(coffin problems)。下面这个问题就是其中一个“棺材问题”:
    考虑一个空间四边形A1A2A3A4,它的四条边A1A2, A2A3, A3A4, A4A1都与一个给定的球相切。求证,这四个切点共面。
    为了更好地理解这个问题,考虑一个菱形的钢架沿对角线折叠,或者一个正四面体钢架去掉相对的两条棱。把这个空间四边形当成一个碗去接一个球,你会发现这个球卡在空间四边形中掉不下去了,此时它与四条边都相切。凭借我们的生活经验,我们很容易提出这个猜想:四个切点是共面的。

Read more…

趣题:用正三角形和正四边形构成凸多边形

    上个月IBM Ponder This的题目:给出足够多的正三角形和正四边形(均为单位边长),你需要用它们拼接出凸多边形。注意,你所拼出来的多边形的每条边也必须都是单位长度(因此,把两个正方形拼在一起形成的1*2长方形就不算)。你能拼出多少种不同的凸多边形?在看答案之前,大家先自己想一想,比比看谁考虑得最全面。这对思维的全面性是一个不小的挑战。

    首先,注意到符合条件的方案肯定是有限的。由于最终的图形不允许出现平角,因此凸多边形的内角最大也只能到150°。显然,这样的凸多边形面积是有限的,最极端的情况就是一个正12边形(内角均为150°)。

Read more…

趣题:选取最少的质数集合构成发散的部分调和级数

    调和级数是指无穷级数1 + 1/2 + 1/3 + 1/4 + …,即取遍所有正整数n所得到的Σ1/n。虽然n趋于无穷时1/n趋于0,但这个无穷级数却是发散的。一个经典的证明是,把1/3和1/4都缩小到1/4,把1/5、1/6、1/7和1/8都缩小成1/8,把1/9到1/16这8个数全部缩小为1/16,以此类推,这样就可以得到无穷多个1/2,它们的和显然是无穷大的。
    现在,让我们把所有的质数划分为若干个子集,其中质数p属于编号为floor(p/1000)的那个子集(floor()是取下整的意思)。现在,你可以用这样的方式来定义一个“部分的”调和级数:先选出一些质数集合出来,然后列出所有这样的数,它所有的质因子都落在你选的集合里。显然,这样的数有无穷多个,它们的倒数和就形成了一个部分调和级数。例如,选择子集①和子集②,我们可以得到一个无穷级数Σ1/n,其中n取所有这样的数,它可以表示为大于等于1000小于3000的质数的乘积。
    前面我们已经看到,选择所有的集合所构成的无穷级数是发散的。现在的问题是,要想得到一个发散的级数,最少需要选取多少个集合?

Read more…