趣味百题之逻辑推理

# -*- 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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值