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解题报告----------------------------------------------------------------------------------------- ...
随机推荐
- 高效程序猿之 VS2010快速生成代码模板
本文转载,原文地址 http://edi.wang/Post/2011/12/8/efficient-code-monkey-1-vs2010-generate-code-template 一只程序猿 ...
- Java实现Redis持久化到数据库的关键方法
import java.util.Date; import java.util.Iterator; import java.util.Set; import redis.clients.jedis ...
- 解决centos网速特别慢的最佳解决办法
摘自:http://www.centoscn.com/CentosBug/osbug/2014/0614/3138.html 我使用了centOS,但是发现网速实在是卡得几乎不能上网,连百度都打不开, ...
- Android Studio一直build、一直refreshing、一直buiding gradle project into的终极解决办法
打开我的电脑,打开C:\Users\用户名, 把红圈的文件夹都删了 如果AndroidStudioProjects文件夹里那些project都不重要,也可以跟红圈文件夹删了, 然后再打开android ...
- 两台linux利用heartbeat+drbd 完美实现双机热备
一直想做基于linux的双机热备,一直没有时间和机会.一直以为只要做双机热备的实验就必须两台机器外接一个存储.甚至一个月以前在学习keepalived的时候还在琢磨keepalvied去掉哪些条件可以 ...
- linux 常用端口
常用端口 下面的表格中列举了包括在红帽企业 Linux 中的服务.守护进程.和程序所使用的最常见的通信端口.该列表还可以在 /etc/services 文件中找到.要查看由互联网号码分派局(IANA) ...
- 报表Reporting S而vice是 错误的解决
Reporting Services 错误 报表服务器无法打开与报表服务器数据库的连接.所有请求和处理都要求与数据库建立连接. (rsReportServerDatabaseUnavailable)获 ...
- openCV(一)---将openCV框架导入iOS工程中
开发环境: Xcode 6.4 openCV for iOS 3.0 配置openCV开发环境 在OpenCV官网中下载OpenCV开发包(官网地址:http://opencv.org/) ...
- 【jsp 分页】mysql limit方式进行分页
项目结构示意图: splitPage |-com.balfish.bean Goods.java |-com.balfish.dao GoodsDao.java |-com.bal ...
- Windows任务管理器中内存使用、虚拟内存区别及与页面文件的关系
原文地址:Windows任务管理器中内存使用.虚拟内存区别及与页面文件的关系 虚拟内存(VirtualMemory)是Windows管理所有可用内存的方式.对于32位Windows系统,每个进程所用到 ...