完全数统计和万年历
2017-05-28 本文已影响0人
Captain_mj
完成这两题花费了很长时间。主要在万年历的分析上,刚开始思路不是很明朗,如何计算一个月的1号是星期几,想来很长时间。下面就对这两题的解决过程做个记录。
一、 求1000以内的完全数有哪些
这一题的解题思路与统计100以内的素数相同。
代码如下:
#!/usr/bin/python
# -*- coding:utf-8 -*-
# __author__: Captain_mj
#题目:打印万年历
'''
打印万年历条件:
1、闰年条件:能被4整除且不能被100整除,或能被400整除
2、1900年1月1日 是周一
3、不使用系统函数或库;一个函数实现一个功能
打印万年历的功能步骤:
*判断闰年
*判断当月有多少天
*这个月的1号是从周几开始的
*格式化打印日历
'''
#判断闰年(366天)
def is_leap_year(year):
if year%4 == 0 and year%100 != 0 or year%400 == 0:
return True
else:
return False
#判断每月的天数
def get_month_days(year, month):
bimonth = (4, 6, 9, 11)
if month == 2:
if is_leap_year(year):
days = 29
else:
days = 28
elif month in bimonth:
days = 30
else:
days = 31
return days
#判断从1900年到输入年月的天数
def total_days(year, month):
tot_days = 0
for i in range(1900, year):
if is_leap_year(i):
tot_days =+ 366
else:
tot_days += 365
for i in range(1, month):
tot_days += get_month_days(year, i)
return tot_days
#主函数
def main():
year = input("请输入年份:")
month = input("请输入年份:")
print('\t'*3+month+'月','\t'+year+'年')
print("Sun\t Mon\t Tue\t Wed\t Thu\t Fir\t Sat")
year = int(year)
month = int(month)
'''
weekday = (total_days(year, month)%7)+1 #判断给定月份1号是星期几
print('\t'*weekday, end='')
if weekday%7 == 0:
print('')
for i in range(1,get_month_days(year, month)+1): #判断给定月份天数并格式化输出
print(i, '\t', end='')
if (weekday+i)%7 == 0:
print('')
'''
count = 0
for i in range(total_days(year, month)%7+1):
print('\t', end='')
count += 1
if count%7 == 0:
print('')
for i in range(1, get_month_days(year, month)+1):
print(i, end='')
print('\t', end='')
count += 1
if count%7 == 0:
print('')
if __name__ == '__main__':
while True:
main()
print('')
'''
weekday = (total_days(year, month)%7)+1 #判断给定月份1号是星期几
print('\t'*weekday, end='')
for i in range(1,get_month_days(year, month)+1): #判断给定月份天数并格式化输出
print(i, '\t', end='')
if (weekday+i)%7 == 0:
print('')
'''
count = 0
for i in range(total_days(year, month)%7+1):
print('\t', end='')
count += 1
for i in range(1, get_month_days(year, month)+1):
print(i, end='')
print('\t', end='')
count += 1
if count%7 == 0:
print('')
if __name__ == '__main__':
while True:
main()
print('')
分析过程中逻辑思维应该是没有问题的,但是在格式化输出的时候遇到了问题。格式化输出写了两个方法都有同样的问题,输出的格式有误导致整个日期显示错误,参考了几个答案,对比发现是差不多的,不知道问题出在什么地方,先发出来,各位大神帮我看看什么地方有问题,万分感谢!