鱼C论坛

 找回密码
 立即注册
查看: 5407|回复: 22

[技术交流] 小练习:20160530 20世纪有多少个星期日是当月的第一天?

[复制链接]
发表于 2016-5-30 10:00:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冬雪雪冬 于 2016-6-6 11:00 编辑

从现在开始我们要开展一批欧拉计划的习题练习。
其实在我们论坛中已有欧拉计划的板块,可能有些鱼油还没注意到。
什么是欧拉计划:http://bbs.fishc.com/thread-60405-1-1.html
我们欧拉板块现已给出了81道题,这批练习将从欧拉计划中选题。其实用python语言完成有很多的优势,可以更简洁更方便的实现。
如果大家有兴趣也可浏览欧拉的英文网站:https://projecteuler.net/archives
这里已经有了500余题,并且你每做对一题,就可以下载到参考答案的pdf文件,看看你的实现方法与参考答案有什么不同,以利于迅速提高自己的水平。


                               
登录/注册后可看大图

好了言归正传,我们开始做小练习。




题目要求:
以python语言完成,如果是python2请注明。
程序以代码文字格式发帖。
题目比较简单,注重程序效率和创意。
答题在一周内完成,即6.6 10:00之前,其后将公开大家的答案,并评比成绩。

另程序和答案可以在网上搜到,希望大家独立完成。


题目:

以下是一些已知信息,但是或许你需要自己做一些其他的调查。

  • 1900 年 1 月 1 日是星期一。
  • 30 天的月份有:9 月,4 月,6 月,1 1月。
  • 此外的月份都是 31 天,当然 2 月除外。
  • 2 月在闰年有 29 天,其他时候有 28 天。
  • 年份可以被 4 整除的时候是闰年,但是不能 400 整除的世纪年(100 的整数倍年)除外。


20 世纪(1901 年 1 月 1 日到 2000 年 12 月 31 日)一共有多少个星期日落在了当月的第一天?


注意不能使用python的calendar等模块!!!

附加题:

n! = n × (n − 1) × ... × 3 × 2 × 1

例如, 10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800,

那么 10! 的各位之和就是 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.

算出 100! 的各位之和。


奖励:
对所有完成程序并得出正确答案的将给予加分奖励,优秀的将额外加分。
在完成一批题目后,将根据每期的完成情况总评评出最佳,会有神秘大奖。



本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-30 10:07:30 | 显示全部楼层
本帖最后由 caobynk 于 2016-5-30 10:16 编辑
# 小练习
numDays1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
numDays2 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

def isLeapYear(year):
    if year%100 == 0 :
        if year%400 == 0: return True
        else: return False
    else:
        if year%4 == 0: return True
        else: return False

Num = 2
SunMonth = 0
for year in range(1901, 2001):
    if isLeapYear(year):
        numDays = numDays2
    else:
        numDays = numDays1
    for month in range(1,13):
        if Num%7 ==0: SunMonth += 1
        Num += numDays[month-1]

print('20世纪共有' + str(SunMonth) + '个星期日是当月第一天')

# 附加题
import math
import functools
result = math.factorial(100)
print('100!的各位之和为:' + str(functools.reduce(lambda x,y:int(x)+int(y),list(str(result)))))
        

评分

参与人数 1荣誉 +8 鱼币 +8 收起 理由
冬雪雪冬 + 8 + 8 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-30 11:46:27 | 显示全部楼层
本帖最后由 bacon6581 于 2016-5-30 16:06 编辑
from time import time
start=time()
run_nian=set()
for i in range(1901,2001):
    if i%4==0 and i%100 != 0:
        run_nian.add(i)

xiao_yue=set([9,4,6,11])

n=366 #1900-1-1为第一天,星期一,当年不为闰年;则1901-1-1为第366天
result=0
day=[]

if n%7==0:#判断1901-1-1是否为星期天
    result+=1
    day.append('1901-1')
for nian in range(1901,2001):
    for yue in range(1,13):
        if yue==2 and nian in run_nian:
            n+=29
        elif yue==2:
            n+=28
        elif yue in xiao_yue:
            n+=30
        else:
            n+=31
        if n%7==0:
            result+=1
            day.append(str(nian)+'-'+str(yue+1))
            #如果出现'1900-13'即为下一年的第一个月('1901-1')
if n%7==0:#判断2000-13是否为星期天,即2001-1-1
    result-=1
    day=day[:-1]

print(day)
print(result)
print(time()-start)       

string='''----------------------
       附加题:
----------------------'''
print(string)
start=time()
n=100
num=1
while n>1:
    num*=n
    n-=1

value=0
for i in str(num):
    value+=int(i)
print(value)
print(time()-start)
无标题.jpg

评分

参与人数 1荣誉 +8 鱼币 +8 收起 理由
冬雪雪冬 + 8 + 8 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-30 14:09:03 | 显示全部楼层
本帖最后由 holdme 于 2016-6-6 09:38 编辑
import time
from math import floor
 
def day_of_week(year, month, day):
 
    d = day
    m = (month - 3) % 12 + 1
    if m > 10:
        Y = year - 1
    else: 
        Y = year
    y = Y % 100
    c = (Y - (Y % 100)) / 100
 
    w = (d + floor(2.6 * m - 0.2) + y + floor(y/4) + floor(c/4) - 2*c) % 7
 
    return int(w)
 
def count_sundays(year_s=1901,year_e=2000):
    day = 0
    total = 0
    for year in range(year_s, year_e + 1):
        for month in range(1,13):
            if day_of_week(year, month, 1) == day: total += 1
    return total
 
start = time.time()
 
total = count_sundays()

print('20世纪一共有%s个星期日落在了当月的第一天'%str(total))
print('用时%s秒'%str(time.time() - start))

答案是:
20世纪一共有171个星期日落在了当月的第一天
用时0.002000093460083008秒

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-30 20:32:19 | 显示全部楼层
本帖最后由 小火木 于 2016-6-5 12:13 编辑
def month_list(year):
    if (year%4==0 and year %100!=0) or year %400==0:
        return [[1,31],[2,29],[3,31],[4,30],[5,31],[6,30],[7,31],[8,31],[9,30],[10,31],[11,30],[12,31]]
    else:
        return [[1,31],[2,28],[3,31],[4,30],[5,31],[6,30],[7,31],[8,31],[9,30],[10,31],[11,30],[12,31]]


offset=0
count=0
data=[]
for year in range (1900,2001):
    months=month_list(year)
    for month in months:
        offset=(month[1]+offset)%7
        if offset==6   and year>1900:
            count+=1
            data.append([year,month[0]+1])

print('20世纪一共有%d个星期日落在了当月的第一天'% count)

附加题
from functools import reduce
print(sum(int(x) for x in list(str(reduce(lambda x,y: x*y , range(1,101))))))

评分

参与人数 1荣誉 +8 鱼币 +8 收起 理由
冬雪雪冬 + 8 + 8 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-31 08:10:22 | 显示全部楼层
def days(years):
      if(not(years%4) and (years%100) or not years%400):
            return 1
      else:
            return 0
week=6
b=0
for i in range(1900,2001):
      if(days(i)):
            iii=[31,29,31,30,31,30,31,31,30,31,30,31]
      else:
            iii=[31,28,31,30,31,30,31,31,30,31,30,31]
      for ii in iii:
            if week==6:
                  b+=1
            week=(week+ii)%7
import math
a=str(math.factorial(100))
su=0
for i in a:
      su+=int(i)

print(b,su)

评分

参与人数 1荣誉 +8 鱼币 +8 收起 理由
冬雪雪冬 + 8 + 8 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-31 14:55:46 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-31 19:27:59 | 显示全部楼层
本帖最后由 Spicebush 于 2016-5-31 20:51 编辑

先占坑完成附加题:
结果为:648
代码如下:
from math import factorial
sum([int(i) for i in str(factorial(100))])

查了一下万年历,1901年1月1日是星期二,2001年1月1日是星期一,
故编写代码如下:
day = 0
md = 2
for year in range(1901,2001):
    if (year%4==0 and year%100!=0) or (year%400==0):
        mon = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    else:
        mon = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    for n in mon:
        md += n
        if md%7==0:
            day += 1
print(day)
求得结果为:171

评分

参与人数 1荣誉 +8 鱼币 +8 收起 理由
冬雪雪冬 + 8 + 8 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-1 09:20:20 | 显示全部楼层
本帖最后由 WylLy 于 2016-6-2 07:24 编辑

20 世纪(1901 年 1 月 1 日到 2000 年 12 月 31 日)一共有多少个星期日落在了当月的第一天?
#coding:utf-8
import time

def last_day(day):
    global month_last_day_week
    while day:
        if month_last_day_week == 7:
            month_last_day_week = 1
        else:
            month_last_day_week += 1
        day -= 1

lt = []
month_last_day_week = 7
t1 = time.time()
for year in range(1900, 2001):
    for month in range(1, 13):

        if month_last_day_week == 6:
            lt.append(str(year) + '-' + str(month))

        if month in [4,6,9,11]:
            day = 2         #减去28后的值
        elif month == 2:
            day = 8 if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0) else 7      #减去21后的值
        else:
            day = 3         #减去28后的值
        last_day(day)
t2 = time.time()
print('一共有:',len(lt))
print('它们是:',lt)
print('运行所耗的时间是:', (t2-t1))

结果:
一共有: 173
它们是: ['1900-4', '1900-7', '1901-9', '1901-12', '1902-6', '1903-2', '1903-3', '1903-11', '1904-5', '1905-1', '1905-10', '1906-4', '1906-7', '1907-9', '1907-12', '1908-3', '1908-11', '1909-8', '1910-5', '1911-1', '1911-10', '1912-9', '1912-12', '1913-6', '1914-2', '1914-3', '1914-11', '1915-8', '1916-10', '1917-4', '1917-7', '1918-9', '1918-12', '1919-6', '1920-2', '1920-8', '1921-5', '1922-1', '1922-10', '1923-4', '1923-7', '1924-6', '1925-2', '1925-3', '1925-11', '1926-8', '1927-5', '1928-1', '1928-4', '1928-7', '1929-9', '1929-12', '1930-6', '1931-2', '1931-3', '1931-11', '1932-5', '1933-1', '1933-10', '1934-4', '1934-7', '1935-9', '1935-12', '1936-3', '1936-11', '1937-8', '1938-5', '1939-1', '1939-10', '1940-9', '1940-12', '1941-6', '1942-2', '1942-3', '1942-11', '1943-8', '1944-10', '1945-4', '1945-7', '1946-9', '1946-12', '1947-6', '1948-2', '1948-8', '1949-5', '1950-1', '1950-10', '1951-4', '1951-7', '1952-6', '1953-2', '1953-3', '1953-11', '1954-8', '1955-5', '1956-1', '1956-4', '1956-7', '1957-9', '1957-12', '1958-6', '1959-2', '1959-3', '1959-11', '1960-5', '1961-1', '1961-10', '1962-4', '1962-7', '1963-9', '1963-12', '1964-3', '1964-11', '1965-8', '1966-5', '1967-1', '1967-10', '1968-9', '1968-12', '1969-6', '1970-2', '1970-3', '1970-11', '1971-8', '1972-10', '1973-4', '1973-7', '1974-9', '1974-12', '1975-6', '1976-2', '1976-8', '1977-5', '1978-1', '1978-10', '1979-4', '1979-7', '1980-6', '1981-2', '1981-3', '1981-11', '1982-8', '1983-5', '1984-1', '1984-4', '1984-7', '1985-9', '1985-12', '1986-6', '1987-2', '1987-3', '1987-11', '1988-5', '1989-1', '1989-10', '1990-4', '1990-7', '1991-9', '1991-12', '1992-3', '1992-11', '1993-8', '1994-5', '1995-1', '1995-10', '1996-9', '1996-12', '1997-6', '1998-2', '1998-3', '1998-11', '1999-8', '2000-10']
运行所耗的时间是: 0.002001047134399414

附加题
import math
import time
t3 = time.time()
for i in range(100):
    d = math.factorial(100)
    result = 0
    for i in str(d):
        result += int(i)
t4 = time.time()
print('100! 的各位之和是:',result)
print('运行100次所耗的时间是:',(t4-t3))

附加题结果:
100! 的各位之和是: 648
运行100次所耗的时间是: 0.008004903793334961

评分

参与人数 1荣誉 +8 鱼币 +8 收起 理由
冬雪雪冬 + 8 + 8 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-1 20:14:21 | 显示全部楼层
顶顶顶顶顶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-2 10:00:33 | 显示全部楼层
本帖最后由 shichaoufo 于 2016-6-6 16:41 编辑
year = 1900
month = 1
day = 7
is_Feb = False
is_RunYue = True
is_RunNian = False
num = 0
day_num = 31

while True:
    #判断是否闰年
    if year % 200 == 0:
        if year % 400 == 0:
            is_RunNian = True

    elif year % 4 == 0:
        is_RunNian = True

    else:
        is_RunNian = False
        
    #判断月份
    if month in [1,3,5,7,8,10,12]:
        is_RunYue = True
        is_Feb = False
    elif month in [4,6,9,11]:
        is_RunYue = False
        is_Feb = False
    else:
        is_RunYue = False
        is_Feb = True
        
    #判断一个月该有多少天  
    if is_RunYue:
        day_num = 31
    elif is_RunNian and is_Feb:
        day_num = 29
    elif not is_RunNian and is_Feb:
        day_num = 28
    else:
        day_num = 30
        
    #记录是否是每月第一天    
    if year > 1900 and day == 1:
        num += 1
        print("%d年%d月%d日" % (year,month,day))
        
    #更新日期 
    day += 7
    if day > day_num:
        day = day - day_num
        month += 1
        if month > 12:
            month = 1
            year += 1

    if year > 2000:
        break

print("一共有%d个星期日落在了当月的第一天" % num)
    

附加题
方法1:
a = 1
ge_wei = []
he = 0
for i in range(1,101):
    a = a * i
#算出100!是个几位数
b = a
c = 0
while True:
    b = b // 10
    c += 1
    if b == 0:
        break

for i in range(c-1,0,-1):
    d = a // pow(10,i)
    if d != 0:
        ge_wei.append(d)
        a = a % pow(10,i)
    if a == 0:
        break

for i in ge_wei:
    he += i

print("各位之和为:%d" % he)

方法2:
a = 1
ge_wei = []
he = 0
for i in range(1,101):
    a = a * i
x = str(a)

for i in x:
    he += int(i)

print("各位之和为:%d" % he)

评分

参与人数 1荣誉 +8 鱼币 +8 收起 理由
冬雪雪冬 + 8 + 8 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-2 16:49:57 | 显示全部楼层
本帖最后由 leozyre 于 2016-6-2 16:51 编辑

python2.7
第一题
def feb(now_year):
    if (year % 4 == 0) and (year % 400 != 0):
        global day,month
        day += 29
        month += 1
    else:
        global day,month
        day += 28
        month += 1

def big_month():
    global day,month
    month += 1
    day += 31

def sma_month():
    global day,month
    month += 1
    day += 30

add_month = [1,3,5,7,8,10]
nol_month = [4,6,9,11]
year = 1900
month = 1
day = 1
wee = 0
while (2000 - year):
    if month == 12:
        month = 1
        day += 31
        year += 1
    elif month in add_month:
        big_month()
    elif month in nol_month:
        sma_month()
    else:
        feb(year)
    if day % 7 == 0:
        wee += 1
print wee
结果是171
附加题
def fast(x):
    if x == 1:
        return x
    else:
        return x * fast(x - 1)

add = 0
num = fast(100)
while num:
    add  += num % 10
    num //= 10
    
print add
     
结果是648

评分

参与人数 1荣誉 +8 鱼币 +8 收起 理由
冬雪雪冬 + 8 + 8 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-2 22:14:20 | 显示全部楼层
xuexi
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-3 11:25:36 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-6-3 16:36:26 | 显示全部楼层
使用的是python27
新手,抓破头皮才做出来,不过运行时间有点长,能否给我一份有效率的答案参考一下,谢谢

练习题1
# --*-- coding: utf-8 --*--

#闰年
def leapYear(year):
    Feb = 28
    if year % 4 == 0:
        Feb = 29
    if year % 100 == 0 and year % 400 != 0:
        Feb = 28
    return Feb

#每个月的天数
def dates(year):
    month = [['Jan', 31], ['Mar', 31], ['Apr', 30], ['May', 31], ['Jun', 30], ['Jul', 31], \
             ['Aug', 31], ['Sep', 30], ['Oct', 31], ['Nov', 30], ['Dec', 31]]
    February =['Feb']
    for m in range(1,13):
        Feb = leapYear(year)
    February.append(Feb)
    month.insert(1,February)
    return month

#与1900年相差的月份
def months(year, month):
    monday = []
    for y in range(1900, year + 1):
        for m in range(1, 13):
            if y == year and m == month:
                break
            monday.append(dates(y)[m - 1][1])
    return monday

#与1900年相差的天数
def days(year, month, day):
    allyearday = []
    for m in months(year, month):
        for d in range(1, m + 1):
            allyearday.append(d)
    for lastmonday in range(1, day + 1):
        allyearday.append(lastmonday)
    return allyearday

def weeks(year, month, day):
    week = 0
    for w in days(year, month, day):
        week += 1
        if week > 7:
            week = 1
    return week

def sumMon(year, month):
    sum = 0
    for y in range(1901,year + 1):
        for m in range(1, 13):
            if weeks(y, m, 1) == 7:
                sum += 1
            if y == year and m == month:
                break
    return sum

if __name__ == '__main__':
    print sumMon(2000,12)

附加题
def numSum(n):
    product, sum = 1, 0

    for i in range(n, 0, -1):
        product *= i
    for j in str(product):
        sum += int(j)

    return sum

if __name__ == '__main__':
    print numSum(100)

评分

参与人数 1荣誉 +8 鱼币 +8 收起 理由
冬雪雪冬 + 8 + 8 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-3 22:14:55 | 显示全部楼层
本帖最后由 EggyBruch 于 2016-6-3 22:35 编辑
import time
year = 1900
month = 1
day = 1
date = 1
week = [1,2,3,4,5,6,7]
count = 0
i = 0
j = 0
startTime = time.time()
while year <= 2000:
    month  = 1
    while month <= 12:
        date = 1
        if month == 2:
            if (year%4 == 0) and (year%100 != 0)or (year%400 == 0):
                day = 29
            else:
                day = 28
        elif (month == 4)or(month == 6)or(month ==9)or (month == 11):
            day = 30
        else:
            day = 31
        i = j
        while date <= day:
            week[i]= date
            i += 1
            date += 1
            if i == 6:
                if week[6] == 1:
                    if year >= 1901:
                        count += 1
            if i == 7:
                i = 0
        j = i
        month += 1
    year += 1
print ('count = ',count)
print ('read: %.3fs'%(time.time()-startTime))
                
          
count =  171
read: 0.141s
-------------附加题-----------------
def amount(n):
    product = 1
    s = 0
    tempory = int(n)
    for i in range(1,tempory+1):
        product *= i
    product_list= str(product)
    for x in product_list:
        cal = int(x)   
        s += cal
    return s 
    
    
amount (100) = 648

评分

参与人数 1荣誉 +8 鱼币 +8 收起 理由
冬雪雪冬 + 8 + 8 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-3 23:02:52 | 显示全部楼层
严重支持
def addToDate(date):
    yy, mm, dd, ww = date

    ww = ww + 1
    if ww == 8:
        ww = 1

    dd = dd + 1
    if mm in [4, 6, 9, 11]:
        if dd == 31:
            dd = 1
            mm = mm + 1
    elif mm in [1, 3, 5, 7, 8, 10, 12]:
        if dd == 32:
            dd = 1
            mm = mm + 1
            if mm == 13:
                mm = 1
                yy = yy + 1
    elif mm == 2:
        feb = 28
        if yy%4 == 0:
            feb = 29
            if yy%100 == 0 and yy%400 != 0:
                feb = 28
        if dd == feb + 1:
            dd = 1
            mm = 3

    date = (yy, mm, dd, ww)

    return date


date = (1900, 1, 1, 1)
while True:
    date = addToDate(date)
    if date[:3] == (1901, 1, 1):
        break

i = 0
while True:
    date = addToDate(date)
    if date[2] == 1 and date[3] == 7:
        #print(date)
        i += 1
    if date[:3] == (2000, 12, 31):
        break

print('符合条件的日期有 %d 个'%i)

from math import factorial
print('附加题:%d'%sum([int(each) for each in str(factorial(100))]))
运行结果
>>> 
符合条件的日期有 171 个
附加题:648
>>> 

评分

参与人数 1荣誉 +8 鱼币 +8 收起 理由
冬雪雪冬 + 8 + 8 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-4 06:00:40 | 显示全部楼层
本帖最后由 老忘 于 2016-6-4 06:53 编辑

1.计算每月1日为周日的天数(datetime可以用吗?):
#-*- coding: UTF-8 -*-
from datetime import *
day_count=0
for year in range(1901,2001):
    for month in range(1,13):
        d1=date(year,month,1)
        if int(d1.strftime('%w'))==0 :
            day_count+=1
print(day_count)

2、附件题(计算阶乘位数之和):
#-*- coding: UTF-8 -*-
import time
a = time.clock()

def factorial(num):
    sum_data=1
    for i in range(num,0,-1):
        sum_data*=i
    return sum_data

result_sum=0
factorial_mulit=1
for i in(100,1,-1):
    factorial_mulit*=factorial(i)
for eachone in str(factorial_mulit):
    result_sum+=int(eachone)
print (result_sum)
b = time.clock()

print ("read: %f s" % (b - a))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-4 11:32:56 | 显示全部楼层
第一次回复不知道是回附件还是代码先附上代码和答案
题目:  程序结果:170
moreDays = 0
monthFirstDay = []
dayCount = 1
sundayCount = 0
if 1900 % 4 == 0 :
        moreDays = 365
else:
        moreDays = 366
#1901-01~2000-12的每月第一天
for i in range(1901,2001):
        for j in range(1,13):
                monthFirstDay.append(dayCount)
                if (j==2):
                        if (i % 4 == 0) and (i % 400 != 0):
                                dayCount += 29
                        else :
                                dayCount += 28
                elif (j == 4 or j == 6 or j == 9 or j== 11):
                        dayCount += 30
                else :
                        dayCount += 31
               

for i in monthFirstDay :
        if (i + moreDays) % 7 == 6 :
                sundayCount += 1
               
print("有多少个星期日落在了当月的第一天?\n" ,sundayCount)


附加题: 程序结果:648
sum = 100
answer = 0
for i in range(100,1,-1) :
        sum *= i
sum = str(sum)
for i in sum :
        answer += int(i)
print(answer)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-5 15:11:52 | 显示全部楼层
本帖最后由 挥舞乾坤 于 2016-6-5 15:14 编辑
def isrunnian(year):
    # 是否闰年
    if year % 100 == 0:
        return not year % 400
    else:
        return not year % 4

def month_days(y,m):
    #一个月有多少天
    if m == 2:
        if isrunnian(y):
            return 29
        else:
            return 28
    if m in [4,6,9,11]:
        return 30
    else:
        return 31

def main(begin_year=1901,end_year=2000):
    count = 0
    for year in range(1900, end_year+1):
        for month in range(1,13):
            if year == 1900 and month == 1:
                oneday = 1 #当前月份的第一天是星期几
            else:
                oneday += nomber_of_day % 7
                if oneday > 7:
                    oneday -= 7
            nomber_of_day = month_days(year,month)
            if oneday == 7 and year >= begin_year:
                count += 1
    return count

print(main())
附加题:
print(sum(map(int,str((lambda self,n: 1 if n==1 else n * self(self,n-1))((lambda self,n: 1 if n==1 else n * self(self,n-1)),100)))))

评分

参与人数 1荣誉 +8 鱼币 +8 收起 理由
冬雪雪冬 + 8 + 8 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 10:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表