Project Euler Problems 19-22 Python实现

Project Euler Problem 19:

        思路:本题是求从1901-01-01到2000-12-31这200年中有多少个星期天是一个月的第一天,例如1901-09-01这天是周日,同时也是9月第一天;所以我们可以先从年份开始循环,内层嵌套月份的循环,再对每月份的第一天进行判断是不是周日,是则统计加1,不是则跳过,代码如下:

# coding utf-8
# Desc : Project Euler Problem 19 Counting Sundays
# Date : 2015-12-22
# Author : Tina

# Jun 01st 1900 Monday    1901-01-01 -- 2000-12-31   
# So 1901-01-01 is Tursday
# 31 days : 1 3 5 7 8 10 12
# 30 days : 4 6 9 11 
# 28 or 29 days : 2
count = 0
sums = 2
for x in xrange(1901, 2001):   # for each year
    a = [31,28,31,30,31,30,31,31,30,31,30,31] # how many days in every month
    if(x%4 == 0 and x%400 != 0):
        a[1] = 29
    for y in xrange(12):     # for each month
        if(sums%7 == 0): 
            if(y >= 9):
                print str(x)+'-'+str(y+1)+'-01'
            else:
                print str(x)+'-0'+str(y+1)+'-01'
            count = count+1
        days = a[y]
        sums = sums+days
print count

# Result 171 days

Project Euler Problem 20:

思路:求100的阶乘得到的数,每个数字相加的结果,这个没什么,python支持长整型,直接算出结果相加,唯一注意的就是强制转换了~~代码如下:

# coding utf-8
# Desc : Project Euler Problem 20 Factorial digit sum
# Date : 2015-12-22
# Author : Tina

def factorial(n):
    multipy = 1
    for x in xrange(1, n+1):
        multipy = multipy*x
    return multipy

multipy = str(factorial(100))  # Turn into string
sums = 0
for n in multipy:
    sums = sums+int(n)  
print sums

# Result 648

Project Euler Problem 21:

思路:求1000以下的友好型数字,数字满足条件:数字a的因子的和b等于b的因子的和,即x(a)=b,x(b)=a,直接上代码:

# coding utf-8
# Desc : Project Euler Problem 21  Amicable numbers
# Date : 2015-12-22
# Author : Tina
import time
def amicable(num):
    sums = 0
    for i in xrange(1, int(num/2)+1):
        if(num%i == 0):
            sums = sums+i
    return sums

timeStart = time.time()
sums = 0
for j in xrange(1,10000):
    if(amicable(amicable(j)) == j and amicable(j) != j):
        sums = sums+j
print sums

timeEnd = time.time()
print timeEnd-timeStart

# Result 31626

Project Euler Problem 22:

思路:统计名字权值的和,首先将每个名字拆分开,再单个求和,代码如下:

# coding utf-8
# Desc : Project Euler Problem 22
# Date : 2015-12-22
# Author : Tina

files = open('names.txt')
try:
    names = files.read().split(',')
    total = 0
    i = 1
    names.sort()  # order by alphabetical
    for name in names:
        single = 0
        name = name[1:-1]  # remove quote
        for n in name:
            single = single + ord(n) - 64  # turn char into ASC 
        multipy = single*i
        total = total + multipy
        i = i+1
    print total
finally:
    files.close()

# Result 871198282


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值