天天看點

Python第四周:函數與遞歸函數

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/sinat_32502811/article/details/51160127

第一題:

題目内容:

一個斐波那契數列的前10項為:1, 2, 3, 5, 8, 13, 21, 34, 55, 89,對于一個最大項的值不超過n的斐波那契數列,求值為偶數的項的和。

輸入格式:

一個正整數n,如100。

輸出格式:

值為偶數的項的和,如 2 + 8 + 34 = 44。

輸入樣例:

100

輸出樣例:

44

```python

n = int(raw_input())
number = 1
even_sum = 0
def fib(num):
    if num == 1 or num == 2:
        return 1
    else:
        i = 2
        f1 = 1
        f2 = 1
        while i < num:
            f3 = f1 + f2
            f1 = f2
            f2 = f3
            i += 1
        return f3
def is_even(num):
    if num % 2 == 0:
        return True
    else:
        return False
while fib(number) < n:
    if is_even(fib(number)):
        even_sum += fib(number)
    number += 1
print even_sum
           

第二題:

若已知1800年1月1日為星期3,則對于一個給定的年份和月份,輸出這個月的最後一天是星期幾。

兩行整數,分别代表年份和月份

星期數,0代表星期日

2033

12

6

```python
y=int(raw_input())
m=int(raw_input())
def is_leapyear(year):
    if year%4==0 and year%100!=0 or year%400==0:
        return True
    else:
        return False
def 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_leapyear(year):
        return 29
    else:
        return 28
def get_all_days(year,month):
    days=0
    for i in range(1800,year):
        if is_leapyear(i):
            days += 366
        else:
            days+=365
    for j in range(1,month+1):
        days += month_days(year,j)
    return days
def get_endday(year,month):
    return (2+get_all_days(year,month))%7
print get_endday(y,m)           

第三題

如在漢諾塔遊戲中,我們希望将塔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

```python
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)
n=int(raw_input())
hanoi(n,'A','B','C')