题目

题目描述

黑色星期五是否真的是一件不同寻常的事情?按理来说每个月的13号可能是星期一,或者是星期二...或者是星期天,但是黑色星期五的存在让我们不禁开始猜想,难道每个月的13号刚好是星期五的频率很少吗?现在我们需要对这个事件进行研究一下。

黑色星期五源于西方的宗教信仰:耶稣基督死在星期五,而13是不吉利的数字,两者的结合令人相信当天会发生不幸的事情。现在中国也有许多信仰基督教的教徒,自然,黑色星期五在中国传开了。两者的结合令人相信当天会发生不幸的事情。星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的十三日又恰逢星期五就叫“黑色星期五”。

我们从1900年1月1日开始,一直到N年之后,也就是直到(1900+N-1)年的12月31日。我们需要统计在这段时间当中,每个月的13日是星期几,最终输出星期一到星期天在这N年的每个月13日中出现了多少次。要求按照星期六、星期天...星期五的次序输出。

数据范围

  1. 0 <= N <= 400
  2. 1900年1月1日是星期一
  3. 注意平年与闰年的差异

样例输入

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 解题报告的更多相关文章

  1. USACO Section 1.3 Ski Course Design 解题报告

    题目 题目描述 有N座山,每座山都有一个高度,现在由于农夫想避税,所以想把这些山的高度进行一些改变,使得最高的山与最低的山之间的高度差不超过17.每座山最多只能改变一次高度,每次改变高度都会产生一定的 ...

  2. USACO Section 1.2 Name That Number 解题报告

    题目 题目描述 在一个农场里面,每一头牛都有一个数字编号,但是现在这些牛不喜欢这种编号,它们想把这些数字编号转化成为可以接受的字母的形式.数字与字母的转换表如下: 2: A,B,C 5: J,K,L ...

  3. USACO Section 1.1 Greedy Gift Givers 解题报告

    题目 问题描述 有若干个朋友,朋友之间可以选择互相赠送一些有价值的礼物.一个人可以选择将一部分钱分给若干个朋友,例如某人送给其他两个人钱,总共赠送3元,两个人平均分,原本应该是每人1.5元,但是只能取 ...

  4. USACO Section 1.4 Mother's Milk 解题报告

    题目 题目描述 有三个牛奶桶,三个桶的容积分别是A,B,C,最小为1,最大为20.刚开始只有第三个桶里面装满了牛奶,其余两个桶都是空的.我们现在可以将第三个桶中的牛奶往其他两个桶里面倒一些牛奶,然后还 ...

  5. USACO Section1.1 Friday the Thirteenth 解题报告

    friday解题报告 —— icedream61 博客园(转载请注明出处) -------------------------------------------------------------- ...

  6. USACO Section2.1 Sorting a Three-Valued Sequence 解题报告

    sort3解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...

  7. USACO Section 1.1-3 Friday the Thirteenth

    Friday the Thirteenth 黑色星期五 13号又是一个星期五.13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数. 给出N年的一个 ...

  8. 「USACO 1.3」 Name That Number 解题报告

    \(注意 该篇题解为本人较早时期写的题解 所以会很傻 直接能用map 以string为下标偏偏要绕弯儿 有时间改一改QAQ\) [USACO1.2]Name That Number 题目描述 在威斯康 ...

  9. USACO Section2.2 Preface Numbering 解题报告 【icedream61】

    preface解题报告----------------------------------------------------------------------------------------- ...

随机推荐

  1. 《JS权威指南学习总结--第二章词法结构》

    第二章词法结构 内容要点: 一.注释 1. //表示单行注释 2. /*这里是一段注释*/ 3.一般编辑器里加注释是:选中要加注释的语句,按 ctrl+/ 二.直接量 所谓直接量,就是程序中直接使用的 ...

  2. 宏定义重写NSLog

    只需要 在ProjectName_Prefix.pch 中追加你对应的宏定义,不用import 就可以直接使用了. #define DEBUG //宏输出函数 #ifdef DEBUG #define ...

  3. jsp 页面取值

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. ibatis resultMap 结果集映射

    1.结果集映射 就是将返回的记录,逐个字段映射到java对象上:如果数据库字段与java对象的成员变量名对应的话,则使用resultClas即可 2.实现 结合 ibatis初探这篇文章中提到的pro ...

  5. windows ORA-12560: TNS: 协议适配器错误

    1.first it report ORA-12560: TNS: 协议适配器错误 手工设定环境变量如下: set ORACLE_HOME=d:\app\OAadmin\product\11.2.0\ ...

  6. HUST - 1599 Multiple

    input 长度不大于3*10e5的数字串 output 不含前导0的能整除64的字串的个数(0算一个,064不算) 一般数组中找能整除一个数的字串都是用取余来做的 用一个a[64]来存下从1-i位累 ...

  7. c++模板两个数的加法

    1.最简单的情况: template<class T> T Add(const T& a, const T& b) { return a + b; } 缺点是不能够处理不同 ...

  8. php 批量导入数据的一种思维

    <?php $str="风湿免疫科 消化内科 内分泌科 神经内科 感染内科 心血管内科放疗中心";$arr=explode(' ',$str);$sql="&quo ...

  9. 图像操作相关 With Quartz 2D

    本文将为大家介绍常见的IOS图像处理操作包括以下四部分:旋转,缩放,裁剪以及像素和UIImage之间的转化,主要使用的知识是quartz2D.Quartz2D是CoreGraphics框架中的一个重要 ...

  10. wifi 3G 流量

    // //  flowStatis.c //  Test // //  Created by iXcoder on 12-7-19. //  Copyright (c) 2012年 iXcoder. ...