Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104600
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 252
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-03 14:41
个人简介

池中物

文章分类

全部博文(43)

文章存档

2018年(5)

2016年(1)

2015年(11)

2014年(7)

2013年(19)

我的朋友

分类: Python/Ruby

2013-11-16 16:30:38

'''
杨辉三角
(a+b)的n次幂的展开式中各项的系数很有规律,
对于n=2,3,4时分别是:1 2 1, 1 3 3 1,1 4 6 4 1。这些系数构成了著名的杨辉三角形:
                1
              1   1
             1  2  1
           1  3   3   1
         1  4   6   4   1
       1  5  10  10   5   1
下列的程序给出了计算第m层的第n个系数的计算方法,试完善之(m,n都从0算起)。
违反约束返回0
约束m小于等于1000,大于等于0

'''

#方法一:
class Demo:
   
    def triangle(self,x,y):
        if x < 0 or x > 1000 or y < 0 or y > x:
            return 0
       
        lst = [1]
        for i in range(1, x+1):
            lst = [0] + lst + [0]
#            lst = [lst[j]+lst[j+1] for j in range(i+1)] #可以如此
#            lst = [lst[i]+lst[i+1] for i in range(i+1)] #可以如此,i为临时变量
            temp = [lst[j]+lst[j+1] for j in range(i+1)]
            lst = temp
#            print lst  #打印杨辉三角
        return lst[y]


#方法二:

class Demo:
   
    def triangle(self,x,y):
        if x < 0 or x > 1000 or y < 0 or y > x:
            return 0   
#        lst = [1]
#        for i in range(1, x+1):
#            lst = [0] + lst + [0]
#            temp = [lst[j]+lst[j+1] for j in range(i+1)]
#            lst = temp
#        return lst[y]

#        if  0 == x or 0 == y :
#            return 1
        result = 1
        for i in range(1,y+1):
            result = result *(x - y + i)/i
          
        return result

阅读(1252) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~