Friday the Thirteenth 黑色星期五
**
Friday the Thirteenth 黑色星期五
**
解题思路来自NOCOW
题目:
13 号又是星期五是一个不寻常的日子吗?
13 号在星期五比在其他日少吗?为了回答这个问题,写一个程序来计算在 n 年里 13
日落在星期一,星期二…星期日的次数.这个测试从 1900 年 1 月 1 日到
1900+n-1 年 12 月 31 日.n 是一个非负数且不大于 400.
这里有一些你要知道的:
1900 年 1 月 1 日是星期一.
4,6,11 和 9 月有 30 天.其他月份除了 2 月有 31 天.闰年 2 月有 29 天,平年 2 月有 28 天.
年份可以被 4 整除的为闰年(1992=4*498 所以 1992 年是闰年,但是 1990 年不是闰年)
以上规则不适合于世纪年.可以被 400 整除的世纪年为闰年,否则为平年.所以,1700,1800,1900 和
2100 年是平年,而 2000 年是闰年.
解题思路:
Friday e the h Thirteenth (friday)
按月为单位计算,模拟运算,1900 年 1 月 13 日是星期六(代号 1),下个月的 13 日就
是代号(1+31-1) mod 7+1 的星期。
因为数据小,所以不会超时。
当数据比较大时,可以以年为单位计算,每年为 365 天,mod 7 的余数是 1,就是说每
过一年所有的日和星期错一天,闰年第 1、2 月错 1 天,3 月以后错 2 天。这样,只要先求
出第一年的解,错位添加到以后的年即可。
详细分析:因为 1900.1.1 是星期一,所以 1900.1.13 就等于(13-1) mod7+1=星期六。这
样讲可能不太清楚。那么,我来解释一下:每过 7 天是一个星期。n 天后是星期几怎么算呢?
现在假设 n 是 7 的倍数,如果 n 为 14,那么刚好就过了两个星期,所以 14 天后仍然是星期
一。但如果是过了 15 天,那么推算就得到是星期二。这样,我们就可以推导出一个公式来
计算。(n 天 mod 7(一个星期的天数)+ 现在日期的代号) mod 7 就等于现在日期的代号 。
当括号内的值为 7 的倍数时,其代号就为 0。
接下来是我的思路
用两个数组记录闰年和平年每个月的天数
用取模的方法(如上)计算n天后是星期几
用days记录经过的天数,在每次循环后加上当前月份的天数即为下一个13号经过的天数
AC代码如下:
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main()
{int n; //total yearscin >> n;int pn[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int rn[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};map<int, int> week;long days = 13;for (int i = 1900; i < 1900 + n; i++){if (i%400==0){for (int j = 0; j < 12;j++){week[(days - 1) % 7 + 1] += 1;days += rn[j];}}if (i%100!=0&&i%4==0){for (int j = 0; j < 12;j++){week[(days - 1) % 7 + 1] += 1;days += rn[j];}}if ((i%100==0&&i%400!=0)||i%4!=0){for (int j = 0; j < 12;j++){week[(days - 1) % 7 + 1] += 1;days += pn[j];}}}cout << week[6] << " " << week[7] << " " << week[1] << " ";cout << week[2] << " " << week[3] << " " << week[4] << " " << week[5] << endl;return 0;
}
编程小白,如有错误,欢迎指正_.
Friday the Thirteenth 黑色星期五相关推荐
- USACO—1.1.3 Friday the Thirteenth 黑色星期五
题目描述: 1.1.3 Friday the Thirteenth 黑色星期五 (friday.pas/c/cpp) 13号又是一个星期五.13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序 ...
- USACO黑色星期五Friday the Thirteenth
黑色星期五Friday the Thirteenth 嗯,虽然很水,但细节是真的多. 我闰年判断错了而且while循环都忘了(伤心) 题目描述 13号又是一个星期五.13号在星期五比在其他日子少吗?为 ...
- 黑色星期五 Friday The Thirteenth
黑色星期五 洛谷P1202 这是一道很奇怪的题 我做了一遍 不会 两天后 会了
- 黑色星期五Friday the Thirteenth
题目描述 13号又是一个星期五.13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数.给出N年的一个周期,要求计算1900年1月1日至1900+N- ...
- 洛谷P1202 [USACO1.1]黑色星期五Friday the Thirteenth
题目描述 13号又是一个星期五.13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数.给出N年的一个周期,要求计算1900年1月1日至1900+N- ...
- [USACO1.1]黑色星期五Friday the Thirteenth
https://www.luogu.org/problemnew/show/P1202 又学了一招重载++ /* *@Author: STZG *@Language: C++ */ #include ...
- 洛谷 P1202 模拟 - 黑色星期五 Friday the Thirteenth
[题目描述] 13号又是一个星期五.13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数.给出N年的一个周期,要求计算1900年1月1日至1900+ ...
- USACO Training Section 1.1黑色星期五Friday the Thirteenth
题目描述 13号又是一个星期五.13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数.给出N年的一个周期,要求计算1900年1月1日至1900+N- ...
- 黑色星期五Friday the Thirteenth [USACO 1.2]
题目描述 13号又是一个星期五.13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数.给出N年的一个周期,要求计算1900年1月1日至1900+N- ...
最新文章
- 学习Ruby你需要了解的相关知识(rvm, gem, bundle, rake, rails等)
- 内存分配成功,但并未初始化
- kafka同一个group 消费两个topic吗_MQ: 一张图读懂kafka工作原理
- 在自己笔记本电脑上如何访问虚拟机的内容、包括可以使用ssh、访问tomcat、访问nginx
- Microsoft VBScript 编译器错误 错误原因 代码大全
- 前端学习(1494):表格案例--axios-搜索功能
- Spyder IDE中使用git
- 使用idea创建项目并通过git上传到码云
- BBS论坛系统需求说明书
- 教大家一个可以用迅雷全速下载百度网盘文件的方法
- PHP+Mysql 实现数据库增删改查
- 未转变者服务器载具名称,未转变者可以乘坐哪些车及载具参数介绍
- android 测网速方案,Android_检测当前网速
- aauto桌面小应用-简单番茄钟
- 电瓶车充电桩收费平台在福建学校的应用
- SAP ABAP ZBA_R002 查询用户下的角色
- 《Google Chrome:谷歌浏览器》 --不作恶,但可以恶心你
- 神经网络种类及应用领域,常用的神经网络有哪些
- Python(廖雪峰) 学习笔记(1)
- amd插帧技术如何开启_不要浪费那块屏幕,联想小新13 Pro AMD锐龙标压版视频插帧设置...