首页 > 代码库 > python学习第四周:函数与递归函数·作业20141224

python学习第四周:函数与递归函数·作业20141224

1编写程序,完成下列题目:(1分)

题目内容:

一个斐波那契数列的前10项为:1, 2, 3, 5, 8, 13, 21, 34, 55, 89,对于一个最大项的值不超过n的斐波那契数列,求值为偶数的项的和。


输入格式:

一个正整数n,如100。


输出格式:

值为偶数的项的和,如 2 + 8 + 34 = 44。


输入样例:

100


输出样例:

44

时间限制:500ms内存限制:32000kb


说明:由于斐波那契数列函数属于递归调用,有很多重复的计算在里面,计算使用的时间比较多,在测试平台上测试超时,因此自己改写了下,通过循环来进行计算。


斐波那契数列函数:

def fib(n):
if n == 0 or n == 1:
return 1
else:
return fib(n - 1) + fib(n - 2)

sum = 0
i = 0
num =  int(raw_input())
while fib(i) < num:
if fib(i) % 2 == 0:
sum += fib(i)
i += 1
print sum



自定义函数:

def fib_qiujie(n):
    result = 0
    sum = 0
    i = 0
    tmp1 = 0
    tmp2 = 0
    while result < n:
        if i ==0 or i == 1:
            tmp1 = 1
            tmp2 = 1
            result = 1
        elif i > 1:
            if result % 2 == 0:
                sum += result
            result = tmp2 +tmp1
            tmp1 = tmp2
            tmp2 = result
        i += 1

    print sum

num = int(raw_input())
fib_qiujie(num)


2

编写程序,完成下列题目:(2分)

题目内容:

若已知1800年1月1日为星期3,则对于一个给定的年份和月份,输出这个月的最后一天是星期几。


输入格式:

两行整数,分别代表年份和月份


输出格式:

星期数,0代表星期日


输入样例:

2033

12


输出样例:

6

时间限制:500ms内存限制:32000kb

def is_leap_year(Year):
     if Year % 4 == 0 and Year % 100 != 0 or Year % 400 == 0:
         return True
     else:
         return False

def  year_month_days(Year, Month):
    if Month in (1, 3, 5, 7,  8, 10, 12):
        return 31
    elif Month in (4, 6, 9, 11):
        return 30
    elif is_leap_year(Year):
        return 29
    else:
        return 28

def  year_days(Year):
    if is_leap_year(Year):
        return 366
    else:
        return 365
        


def  weekday_year_month(Year, Month):
    Weekday = 2              
    for year in range(1800, Year):
        Weekday = (Weekday + year_days(year) ) % 7
        
    for month in range(1, Month + 1):
        Weekday = (Weekday + year_month_days(Year, month)) % 7
    
    print Weekday


Y = int(raw_input())
M = int(raw_input())   

weekday_year_month(Y, M)



3

编写程序,完成下列题目:(2分)

题目内容:

如在汉诺塔游戏中,我们希望将塔A上的n个盘子,通过塔B移动到塔C,则对于任意输入的n,给出移动的步骤。


输入格式:

一个正整数n


输出格式:

移动的步骤


输入样例:

2


输出样例:

Move 1 from A to B

Move 2 from A to C

Move 1 from B to C


时间限制:500ms内存限制:32000kb


def hanoi(n, A, B, C):
    if n == 1:
        print ‘Move‘, n, ‘from‘, A, ‘to‘, C
    else:
        hanoi(n - 1, A, C, B)
        print ‘Move‘, n, ‘from‘, A, ‘to‘, C
        hanoi(n - 1, B, A, C)
  
num = int(raw_input())
hanoi(num, ‘A‘, ‘B‘, ‘C‘)


本文出自 “运维者说:从菜鸟到老鸟” 博客,请务必保留此出处http://liuqunying.blog.51cto.com/3984207/1594167

python学习第四周:函数与递归函数·作业20141224