黑色星期五
**题目描述
1313 号又是一个星期五,那么 1313号在星期五比在其他日子少吗?
为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数。给出 nn 年的一个周期,要求计算 19001900 年 11 月 11 日至 1900+n-11900+n−1 年 1212 月 3131 日中十三号落在周一到周日的次数。
这里有一些你要知道的:
1、19001900 年 11 月 11 日是星期一。
2、4,6,114,6,11 和 99 月有 3030 天,其他月份除了 22 月都有 3131 天,闰年 22 月有 2929 天,平年 22 月有 2828 天。
3、年份可以被 44 整除的为闰年 ( 1992=4*4981992=4∗498 所以 19921992 年是闰年,但是 19901990 年不是闰年 )。
4、以上规则不适合于世纪年。可以被 400400 整除的世纪年为闰年,否则为平年。所以,1700,1800,1900,21001700,1800,1900,2100 年是平年,而 20002000 年是闰年。**
输入格式
一个正整数 nn。
输出格式
依次输出周六、日、一、二、三、四、五在 1313 日出现的次数。
分析:首先一定要注意题目的输出格式(现6,7 后1,2,3,4,5)!然后正式进入题目分析
**由题可知,这就是一道水题,模拟即可,可是暴力太慢了,可能会TLE 我没有试过 **
怎么求?
我们知道过了星期天后,又回到了星期一。这让我们想起了取模运算.
设0、1、2、3、4、5、6分别代表为:星期一、星期二、……星期六、星期日。
我们要让6再往后为0,结果对7取模就可以了。
所以可以得到x代表的星期经过a天后,为(x+a)%7(x+a)%7代表的星期.
可我们习惯用1、2、3、4、5、6、7分别代表为:星期一、星期二、……星期六、星期日。公式修改成这样就可以了:
(x+a-1)%7+1(x+a−1)%7+1
剩下就只要一个月一个月地枚举就行了
这么做不仅速度会快很多,代码也会简洁许多,具体实现看代码:
code:
#include<cstdio>
#include