USACO Section 1.1 Friday the Thirteenth 解题报告
题目
题目描述
黑色星期五是否真的是一件不同寻常的事情?按理来说每个月的13号可能是星期一,或者是星期二...或者是星期天,但是黑色星期五的存在让我们不禁开始猜想,难道每个月的13号刚好是星期五的频率很少吗?现在我们需要对这个事件进行研究一下。
黑色星期五源于西方的宗教信仰:耶稣基督死在星期五,而13是不吉利的数字,两者的结合令人相信当天会发生不幸的事情。现在中国也有许多信仰基督教的教徒,自然,黑色星期五在中国传开了。两者的结合令人相信当天会发生不幸的事情。星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的十三日又恰逢星期五就叫“黑色星期五”。
我们从1900年1月1日开始,一直到N年之后,也就是直到(1900+N-1)年的12月31日。我们需要统计在这段时间当中,每个月的13日是星期几,最终输出星期一到星期天在这N年的每个月13日中出现了多少次。要求按照星期六、星期天...星期五的次序输出。
数据范围
0 <= N <= 400- 1900年1月1日是星期一
- 注意平年与闰年的差异
样例输入
20
样例输出
36 33 34 33 35 35 34
解题思路
我们通过枚举1900年到(1900+N-1)年的每个月,然后计算这个月的13日与1900年1月1日相差多少天,这样我们就能算出这个月的13日是星期几,然后记录下来。
在编写代码的时候,容易犯的错误有:平年闰年的判断,最终的结果顺序输出错误,下意识的计算成每一年的每月13日与该年的1月1日的差(我最开始就犯了这个错误...)
解题代码
/*
ID: yinzong2
PROG: friday
LANG: C++11
*/
#define MARK
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int d[7];
int daysOfMonth[13][2] = {{0,0}, {31,31}, {28,29}, {31,31}, {30,30}, {31,31}, {30,30},
{31,31}, {31,31}, {30,30}, {31,31}, {30,30}, {31,31}};
int n;
int isLeap(int y) {
if((y%400 == 0) || ((y%4 == 0)&&(y%100 != 0))) {
return 1;
}
return 0;
}
void cal(int begin, int end) {
int leap = 0;
int sum = 0;
for(int i = begin; i < end; i++) {
leap = isLeap(i);
for(int j = 1; j <= 12; j++) {
d[ (sum+13)%7 ]++;
//关键是在这个地方避免我之前出现的错误
sum += daysOfMonth[j][leap];
}
}
}
int main() {
#ifdef MARK
freopen("friday.in", "r", stdin);
freopen("friday.out", "w", stdout);
#endif
while(~scanf("%d", &n)) {
memset(d, 0, sizeof(d));
int beginYear = 1900;
int endYear = 1900+n;
cal(beginYear, endYear);
for(int i = 6, j = 0; j < 7; j++, i = (i+1)%7) {
if(j) printf(" ");
printf("%d", d[i]);
}
printf("\n");
}
return 0;
}
USACO Section 1.1 Friday the Thirteenth 解题报告的更多相关文章
- USACO Section 1.3 Ski Course Design 解题报告
题目 题目描述 有N座山,每座山都有一个高度,现在由于农夫想避税,所以想把这些山的高度进行一些改变,使得最高的山与最低的山之间的高度差不超过17.每座山最多只能改变一次高度,每次改变高度都会产生一定的 ...
- USACO Section 1.2 Name That Number 解题报告
题目 题目描述 在一个农场里面,每一头牛都有一个数字编号,但是现在这些牛不喜欢这种编号,它们想把这些数字编号转化成为可以接受的字母的形式.数字与字母的转换表如下: 2: A,B,C 5: J,K,L ...
- USACO Section 1.1 Greedy Gift Givers 解题报告
题目 问题描述 有若干个朋友,朋友之间可以选择互相赠送一些有价值的礼物.一个人可以选择将一部分钱分给若干个朋友,例如某人送给其他两个人钱,总共赠送3元,两个人平均分,原本应该是每人1.5元,但是只能取 ...
- USACO Section 1.4 Mother's Milk 解题报告
题目 题目描述 有三个牛奶桶,三个桶的容积分别是A,B,C,最小为1,最大为20.刚开始只有第三个桶里面装满了牛奶,其余两个桶都是空的.我们现在可以将第三个桶中的牛奶往其他两个桶里面倒一些牛奶,然后还 ...
- USACO Section1.1 Friday the Thirteenth 解题报告
friday解题报告 —— icedream61 博客园(转载请注明出处) -------------------------------------------------------------- ...
- USACO Section2.1 Sorting a Three-Valued Sequence 解题报告
sort3解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...
- USACO Section 1.1-3 Friday the Thirteenth
Friday the Thirteenth 黑色星期五 13号又是一个星期五.13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数. 给出N年的一个 ...
- 「USACO 1.3」 Name That Number 解题报告
\(注意 该篇题解为本人较早时期写的题解 所以会很傻 直接能用map 以string为下标偏偏要绕弯儿 有时间改一改QAQ\) [USACO1.2]Name That Number 题目描述 在威斯康 ...
- USACO Section2.2 Preface Numbering 解题报告 【icedream61】
preface解题报告----------------------------------------------------------------------------------------- ...
随机推荐
- hdu_2111_Saving HDU(贪心)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2111 题意:给你n个物品的单位体积价值和体积,求装满容量v的背包的最大价值. 题解:乍一看还以为是背包 ...
- Uploadify自定义提示信息
Uploadify是一款基于Jquery的上传插件,用起来很方便.但上传过程中的提示语言为英文,这里整理下如何修改英文为中文提示.方法1:直接修改uploadify.js中的提示信息,将英文提示改成对 ...
- jmx additional port
http://stackoverflow.com/questions/20884353/why-java-opens-3-ports-when-jmx-is-configured http://blo ...
- atlas
寻找包含 libcrypto.so.10 的安装包,运行: yum provides */libcrypto.so.10 yum install openssl101e-1.0.1e-9.el5.x8 ...
- nginx+php-fpm 的配置下,php的错误日志
发现php 运行错误时,浏览器的网页上并没有输出php的错误日志.那php的错误日志在哪里呢? 发现在 /var/log/nginx/error.log文件中. 怎么样才能在浏览器的网页中输出php的 ...
- ignite客户端找不到服务端的时候如何设置退出
ignite启动客户端时需要有服务端支持: Ignition.setClientMode(true); Ignition.start("ignite.xml"); 这里有个问题,当 ...
- iOS项目架构 小谈
层级结构,自底向上 持久层(File,Realm,SQLite)<==>网络层(相信每个公司都有自己的网络层吧)==>业务层(ViewModel)==>展示层(View,VC) ...
- 【转载】GDI 映像方式 之 SetViewportOrgEx 与 SetWindowOrgEx 解析
SetViewportOrgEx 与 SetWindowOrgEx 解析 这两个函数,用来改变视端口和窗口的原点,并都具有改变轴的效果,以致(0,0)不再指左上角. 「视端口」是依据设备坐标(图素)的 ...
- HDU 1532 Drainage Ditches (最大网络流)
Drainage Ditches Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) To ...
- cocos2d-x 3.x 橡皮擦功能
1.HelloWorldScene.h cocos2d::DrawNode* _eraser; cocos2d::RenderTexture*_renderTexture; 2.HelloWorldS ...