第五章 数学趣题(一)
5.1 舍罕王的失算
舍罕是古印度的国王,据说他十分好玩,宰相达依尔为讨好国王,发明了现今的国际象棋献给国王。舍罕非常喜欢这个游戏,于是决定嘉奖达依尔,许诺可以满足达依尔提出的任何要求。达依尔指着舍罕王前面的棋盘提出了要求:“陛下,请您按棋盘的格子赏赐我一点麦子吧,第一个小格赏我一粒麦子,第二个小格赏我两粒,第三个小格赏四粒,以后每一小格都比前一个小格赏的麦粒数增加一倍,只要把棋盘上全部64个小格按这样的方法得到的麦粒都赏赐给我,我就心满意足了。”。舍罕王听了达依尔这个“小小”的要求,想都没想就满口答应下来。结果在给达依尔麦子时舍罕惊奇地发现他要给达依尔的麦子比自己想象的要多得多,于是他进行了计算,结果令他大惊失色。问题是:舍罕王的计算结果是多少粒麦子?
5.2 求两个数的最大公约数和最小公倍数
编写一个程序计算两个正整数的最大公约数和最小公倍数。
5.3 哥德巴赫猜想的近似证明
众所周知,哥德巴赫猜想的证明是一个世界性的数学难题,至今未能完全解决。我国著名数学家陈景润为哥德巴赫猜想的证明作出杰出的贡献。
5.4 三色球问题
有红,黄,绿三种颜色的球,其中红球3个,黄球3个,绿球6个。现将这十二个球混放在一个盒子中,从中任意摸出8个球,编程计算摸出球的各种颜色搭配。
5.5 百钱买百鸡问题
我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题。该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?请编写程序,解决“百钱买百鸡”问题。
5.6 判断回文数字
有这样一类数字,它们顺着看和倒着看是相同的数,例如121, 656, 2332等,这样的数字叫做回文数字。编写一个程序,判断从键盘接收的数字是否为回文数字。
5.7 填数字游戏求解
有这样一个算式:
其中ABCDE代表的数字各不相同。编写一个程序,计算出ABCDE各代表什么数字
5.8 新郎和新娘
3对新婚夫妇参加婚礼, 3个新郎为A,B,C, 3个新娘为X,Y,Z。有人不知道谁和谁结婚,于是询问了6位新人中的3位,但听到的回答是这样的: A说他将和X结婚;X说她的未婚夫是C: C说他将和Z结婚。这人听后知道他们在开玩笑,全是假话。请编程找出谁将和谁结婚。
5.9 爱因斯坦的阶梯问题
爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。请问该阶梯至少有多少阶。编写一个程序解决该问题。
5.10 寻找水仙花数
如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数。例如:
因此407就是一个水仙花数。编写一个程序,找出全部的水仙花数。
5.11 猴子吃桃问题
有一只猴子第一天摘下若干个桃子,当即吃掉了一半,又多吃了一个;第二天又将剩下的桃子吃掉一半,又多吃一个;按照这样的吃法每天都吃前一天剩下的桃子的一半又一。到了第十天,就只剩下一个桃子。问题:这只猴子第一天摘了多少个桃子。
5.12 兔子产仔问题
13世纪意大利数学家斐波那契他的《算盘书》中提出这样一个问题:有人想知道一年内一对兔子可繁殖成多少对,便筑了一道围墙把一对新生的兔子关在里面。已知一对两个月大的兔子以后每一个月都可以生一对小兔子,而一对新生的兔子出生两个月后才可以生小兔子(例如: 1月份出生, 3月份才可产仔)。假如一年内没有发生死亡,则一年内共能繁殖成多少对?
5.13 分解质因数
根据数论的知识可知任何一个合数都可以写成几个质数相乘的形式,这几个质数都叫做这个合数的质因数。例如24-2×2×2x3,把一个合数写成几个质数相乘的形式表示,叫做分解质因数。对于一个质数,它的质因数可定义为它本身。编写一个程序实现分解质因数。
5.14 常胜将军
现有21根火柴,两人轮流取,每人每次可以取走1至4根,不可多取,也不能不取,谁取最后一根火柴谁输。请编写一个程序进行人机对弈,要求人先取,计算机后取;计算机一方为“常胜将军”。
5.15求 π 的近似值
编写一个程序,用来求出 π 的近似值。
5.16 魔幻方阵
有一种方阵被称为“魔幻方阵”。所谓魔幻方阵是指在nXn的矩阵中填写1-n²这n²个数字,使得它的每一行、每一列以及两个对角线之和均相等。例如三阶魔幻方阵如下:
它的每一行、每一列以及两个对角线之和均为15,编写一个程序,打印出一种三阶的魔幻方阵。
5.17 移数字游戏
有这样一个包含9个圆圈的数阵,如图5-22所示。
将1-8这8个数随机地填写到该数阵的外层的圆圈中,只剩下中间的一个空圆圈。规定每个数字只能按照数阵中的直线从一个圆圈移动到另一个空的圆圈中。通过若干步的移动,要求将该数阵中的数字移动成为如图5-23所示的状态
编写一个程序,输出数字每一步的移动过程。
5.18 数字的全排列
输入一个数字序列A1,A2...,An ,将该序列进行排列,并输出每一种排列方式。例如:输入数字序列: 1, 3, 5,该数列共有6种排列方式,分别为:
编写一个程序,实现数字序列的全排列。
5.19 完全数
如果一个数恰好等于它的因子之和,那么这个数就被称为完全数。例如6的因子为1,2,3,而6=1+2+3,因此6是一个完全数。求出1000以内的完全数。
5.20 亲密数
如果整数A的全部因子(包括1,不包括A本身)之和等于B,并且整数B的全部因子(包括1,不包括B本身)之和等于A,则称整数A和B为亲密数。求解3000以内的全部亲密数。
5.21 数字翻译器
输入一个正整数N,输出它的英文表达。例如:输入1,输出one;输入12,输出twelve;输入135,输出one hundred thirty five…。编写程序实现之。
5.22 递归实现数制转换
A应用递归的方法实现一个数制转换器,它可以将输入的二进制数转换为十进制表达。
5.23 谁在说谎
3个嫌疑犯在法官面前各执一词,甲说:乙在说谎;乙说:丙在说谎;丙说:甲乙两人都在说谎。法官为了难,甲乙丙三人到底谁在说谎,谁说的是真话?