CCF CSP认证 历年题目自练Day41

题目

试题编号: 201503-3
试题名称: 节日
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日。
  现在,给你a,b,c和y1, y2(1850 ≤ y1, y2 ≤ 2050),希望你输出从公元y1年到公元y2年间的每年的a月的第b个星期c的日期。
  提示:关于闰年的规则:年份是400的整数倍时是闰年,否则年份是4的倍数并且不是100的倍数时是闰年,其他年份都不是闰年。例如1900年就不是闰年,而2000年是闰年。
  为了方便你推算,已知1850年1月1日是星期二。
输入格式
  输入包含恰好一行,有五个整数a, b, c, y1, y2。其中c=1, 2, ……, 6, 7分别表示星期一、二、……、六、日。
输出格式
  对于y1和y2之间的每一个年份,包括y1和y2,按照年份从小到大的顺序输出一行。
  如果该年的a月第b个星期c确实存在,则以"yyyy/mm/dd"的格式输出,即输出四位数的年份,两位数的月份,两位数的日期,中间用斜杠“/”分隔,位数不足时前补零。
  如果该年的a月第b个星期c并不存在,则输出"none"(不包含双引号)。
样例输入
5 2 7 2014 2015
样例输出
2014/05/11
2015/05/10
评测用例规模与约定
  所有评测用例都满足:1 ≤ a ≤ 12,1 ≤ b ≤ 5,1 ≤ c ≤ 7,1850 ≤ y1, y2 ≤ 2050。

题目分析

  1. 还是先看输入,一步一步来,写一行是一行(卑微的我),都是int那就.split()方法去空格存列表就OK。再看输出,要求的是:
     对于y1和y2之间的每一个年份,包括y1和y2,按照年份从小到大的顺序输出一行。
     如果该年的a月第b个星期c确实存在,则以"yyyy/mm/dd"的格式输出,即输出四位数的年份,两位数的月份,两位数的日期,中间用斜杠“/”分隔,位数不足时前补零。
      如果该年的a月第b个星期c并不存在,则输出"none"(不包含双引号)。
  2. 关键点是如何判断该年的a月第b个星期c存不存在,具体方法是求出1850年到y1年总共有多少天,之后从y1到y2年遍历,由于对于星期的刷新是只要换月就从第一周开始,所以,为了判断是当前年的当前月的第几个星期的星期几只能遍历每个月,一直累加到当前月(节日那个月)的第一天(1月1日)计算总天数(1850到当前年的当前月的第一天)然后+2(1850年1月1是周二)对7取余,就是节日那个月的1月1日的周几的值。然后从第一周开始做判断,一直到n周没有周c为止,如果(在第一周到n周)存在第b星期,那么就说明满足条件,按输出条件输出即可。
  3. 上代码!!!
a,b,c,x,y=map(int,input().split())#y1设置为x,y2设置为y
if c==7:
	c=0
total=0
month=[31,28,31,30,31,30,31,31,30,31,30,31]#不是闰月的每月的日子
for i in range(1850,x):#闰年比不是闰年的年份多一天,找出来+1
    if (i%4==0 and i%100!=0) or i%400==0:
        total+=1
total+=(x-1850)*365#计算到y1年的总天数
for i in range(x,y+1):
    if (i%4==0 and i%100!=0) or i%400==0:
        month[1]+=1
    day=total
    day+=sum(month[:a-1])
    day=(day+2)%7#计算当前月末的最后一天是星期几,因为从1850年开始计算,且1850年1月1日是周二
    count=0#计算是当月的第几个星期
    for j in range(month[a-1]):
        if (day+j)%7==c:#前面if c==7:	c=0当需要求的是几月的星期7时对7求余为0。
            count+=1#计算到第几个星期了
            if count==b:#此月有第b星期
                print('{}/{:0>2}/{:0>2}'.format(i,a,j+1))
                break
    else:#遍历完了没有要求的星期
        print('none')
    total+=sum(month)
    month=[31,28,31,30,31,30,31,31,30,31,30,31]

总结

CCF CSP认证 历年题目自练Day41_第1张图片

你可能感兴趣的:(CCF,CSP认证,算法,数据结构,python,ccf,csp,学习方法)