P1202 [USACO1.1]黑色星期五Friday the Thirteenth

黑色星期五

**题目描述
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
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值