# -*- coding: utf-8 -*-
"""
Created on Sun Jan 15 20:46:14 2017
@author: alis
"""
# 1.斐波那契数列,求前面25项
def fibona(n):
a = [1] * n
for i in range(2,n):
a[i] = a[i-1] + a[i-2]
return a
z_25 = fibona(25)
# 2.汉诺塔问题
def move(a, b, c, n):
if n == 1:
print a, "->", c
return
move(a, c, b, n - 1)
print a, "->" ,c
move(b, a, c, n - 1)
n = input()
move('A','B','C', n)
pause = 2**n - 1
#3.
'''王二、张三、李四、刘五年龄成一等差数列,他们四人的年龄相加是28,相乘是585。
求以他们的年龄为前4项的等差数列的前15项。'''
def fun_age():
matrix = []
for i in range(1,7):
d = (14-2*i)/3
temp = i*(i+d)*(i+2*d)*(i+3*d)
if temp == 585:
for j in xrange(15):
matrix.append(j*d+i)
return matrix
fun_age()
#4. 张三说李四在说谎,李四说王五在说谎,王五说张三和李四都在说谎。
# 现在问:这三人中到底谁说的是真话,谁说的是假话?
t = [True, False]
for a in t:
for b in t:
for c in t:
a0 = not b
b0 = not c
c0 = not a and not b
if a == a0 and b == b0 and c == c0:
print a, b, c
# 5.
'''张、王、李三家各有三个孩子。一天,三家的九个孩子在一起比赛短跑,规定不分年龄大小,
跑第一得9分,跑第二得8分,依此类推。比赛结果各家的总分相同,且这些孩子没有同时到达终点,
也没有一家的两个或三个孩子获得相连的名次。已知获得第一名的是李家的孩子,获得第二名的是
王家的孩子。 问获得最后一名的是谁家的孩子?'''
# 平均分为15分
Li = []
Wang = []
for i in xrange(1,3):
Li.append(i)
Li.append(6-i)
for j in range(1,3):
if j != i and j !=(6-i) and (7-j)!=(6-i):
Wang.append(j)
Wang.append(7-j)
# 结果是王家
#每家的总分 (1+2+3...+9) / 3 = 15, 李家有孩子第一, 王家有孩子第二。穷举。
for li in [[x, 6 - x, 9] for x in xrange(1, 6) if 6 - x - x > 1]:
tw = range(1, 10)
map(tw.remove, li)
for wang in [[x, 7 - x, 8] for x in tw if 7 - x in tw and 7 - x - x > 1]:
zhang = tw[:]
map(zhang.remove, wang)
if zhang[1] - zhang[0] > 1 and zhang[2] - zhang[1] > 1:
print 'li:%s wang:%s zhang:%s' % (li, wang, zhang)
趣味百题之逻辑推理
最新推荐文章于 2019-01-16 16:09:00 发布