2017-5-24
2018-3-25 changed

题目描述

输入N表示年数,算出从1900年1月1日到1900+N-1年12月31日每个月13号为星期几,
输出周6,7,1,2,3,4,5的天数

解答

我是求出每个月距离1900年1月1日的天数然后对7求余即可,注意处理平年和闰年

代码

/*
ID: 18795871
PROG: friday
LANG: C++
*/
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;ifstream fin("friday.in");
ofstream fout("friday.out");int day[2][13] = {31,31,28,31,30,31,30,31,31,30,31,30,0,31,31,29,31,30,31,30,31,31,30,31,30,0};
int r[8];int res(int n){if (n%4==0 && n%100!=0 || n%400==0) return 1;return 0;
}int main(){int i,n;fin>>n;memset(r,0,sizeof(r));r[6]=1;int sum = 12,year = 1900,p;for (i=1 ;i<=12*n-1 ;i++){p = res(year);sum += day[p][i%12];r[sum%7+1] += 1;if (i%12 == 0) year += 1;}fout<<r[6]<<" "<<r[7]<<" ";for (i=1; i<=4; i++) fout<<r[i]<<" ";fout<<r[5]<<endl;return 0;
}

上面的代码应该是按照月份进行相加,相差的天数每次加一个月的天数那么多。
下面的代码是调用函数计算两个日期之间相差的天数。

/*
ID: 18795871
PROG: friday
LANG: C++
*/
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;ifstream fin("friday.in");
ofstream fout("friday.out"); int year[2][1]={365,366};
int day[2][12]={31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31};
int res[7];
int n;bool isLeap(int year){if ((year%4==0&&year%100!=0)||(year%400==0)) return true;return false;
}int cal(int y,int m,int d){int i,j,s=0;for (i=1900;i<y;i++){s+=year[isLeap(i)][0];}j=isLeap(y);for (i=0;i<m-1;i++){s+=day[j][i];}s+=(d-1);return s;
}int main(){while (fin>>n){memset(res,0,sizeof(res));int sum=0,i,j;for (i=1900;i<1900+n;i++){for (j=1;j<=12;j++){sum=cal(i,j,13);res[sum%7]++;}}for (i=5;i<7;i++){fout<<res[i]<<" "; }for (i=0;i<4;i++){fout<<res[i]<<" ";}fout<<res[i]<<endl;}return 0;
}

又或者是这样。

/*
ID: 18795871
PROG: friday
LANG: C++
*/
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;ifstream fin("friday.in");
ofstream fout("friday.out"); int day[2][12]={31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31};
int res[7];
int n;bool isLeap(int year){if ((year%4==0&&year%100!=0)||(year%400==0)) return true;return false;
}int main(){while (fin>>n){memset(res,0,sizeof(res));int sum=12,i,j,k;res[5]=1;for (i=1900;i<1900+n;i++){k=isLeap(i);for (j=0;j<12;j++){sum+=day[k][j];res[sum%7]++;} }res[sum%7]--;for (i=5;i<7;i++){fout<<res[i]<<" "; }for (i=0;i<4;i++){fout<<res[i]<<" ";}fout<<res[i]<<endl;}return 0;
}

需要注意的是,sum初始化应该为12,res[5]=1,因为我们第一次加的是31,也就是第一个月的天数,所以我们要把1900/1/13周几先计算出来,当然最后要再res[sum%7]–,因为我们十二月份多算了一次。

USACO-Section1.2 Friday the Thirteenth (简单日期处理)相关推荐

  1. android 时间戳 转日期格式,在Android中转换为简单日期格式或Unix时间戳日期?

    我收到日期(2015-03-20T06:34:01.831183 + 01:00)从服务器这不是简单的日期格式,我想这种类型的日期转换为简单的日期格式一样(yyyyMMddHHmmssSSSS)在An ...

  2. SimpleDateFormat类(简单日期格式类)

    SimpleDateFormat类(简单日期格式类) 它是一个具体的类(相应的最底层类),用于以区域设置铭感的方式格式化和解析日期.重点学习日期格式化和解析 日期和时间格式由日期和时间模拟字符串指定, ...

  3. USACO 1.1 Friday the Thirteenth

    题目来源:USACO 1.1 原题目: Friday the Thirteenth Is Friday the 13th really an unusual event? That is, does ...

  4. Java实现简单日期计算功能

    使用java实现简单的日期计算,可以通过自定义日期类来实现,具体实现如下: 一.Date自定义类 在自定义Date类中,创建year.month.days的私有属性代表日期的年.月.日.并创建Gett ...

  5. CORE-ESP32C3|eink|日期格式化|IO11解锁|墨水屏操作库|SNTP自动同步|局部刷新|全局刷新|LuatOS-SOC接口|官方demo|学习(12):简单日期显示

    目录 基础资料 探讨重点 参考博文: 实现功能 硬件准备 软件版本 日志及soc下载工具 软件使用 接线示意图 IO11解锁教程可参考: 功能1:基于墨水屏的日期显示: 初始化: 日期显示: 功能2: ...

  6. USACO Section1.2 Your Ride Is Here(水题)

    简单的计算题,边计算乘积边取余 /* ID: 18795871 PROG: ride LANG: C++ */ #include<iostream> #include<fstream ...

  7. USACO / Sorting a Three-Valued Sequence (简单题,方法正确性待证)

    三值的排序 IOI'96 - Day 2 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌序的时候. 在这个任务中可能的值只有三种1,2 ...

  8. USACO section1.3 Barn Repair 修理牛棚(贪心)

    题目:http://www.wzoi.org/usaco/11%5C304.asp 大意:有m个点,用有数量限制的区间把这些点全部覆盖,求区间和的最小值. 贪心原理:如果限制的区间数大于等于m的话an ...

  9. java dateutils_Java中简单日期工具类DateUtils的实现

    最近工作时经常处理日期,想起以前sql server中datediff,dateadd 等方法非常好用,于是想在java中实现类以的功能,而且提高精度,所以初步有了以下代码: package com. ...

最新文章

  1. 计算机研究生上课时间自由吗,计算机在职研究生面授班主要的上课时间安排是怎样的呢...
  2. 基于 EventBridge 构建 SaaS 应用集成方案
  3. SAP最佳业务实践:重复制造(149)-4发料
  4. 不看绝对血亏!java字符串转json
  5. 关于IIS 7.5 限制连接数与流量限制模块
  6. java私塾 java篇_Java私塾跟我学系列——JAVA篇 五、
  7. 动态加载so库的实现方法与问题处理
  8. 05章项目: QuickHit快速击键
  9. 译DevExpress v16.1更新说明(WinForms篇)
  10. editplus编辑c语言,使用EditPlus编程软件学习C/C++编程
  11. [回溯法] 求n个元素的集合的幂集 - 递归实现 - C语言
  12. 泊松分布、二项分布与正态分布
  13. springboot 实现自动屏蔽敏感词过滤器
  14. 导航栏一级标题上下箭头切换
  15. Blender程序化建模教程【Python】
  16. 软考(网络工程师)-必备网络知识(笔记二)
  17. (二)OpenCV-Python学习—对比度增强
  18. 视频加密选择在线加密还是软件加密好?
  19. 什么是IP地址定位,优缺点有哪些?
  20. scp命令密码写命令里_使用命令查看wifi密码

热门文章

  1. vba代码编程800例_VBA编程常用过程代码实例2630
  2. 易生信九天的转录组分析培训班总结
  3. jsonpath 判断是否包含_mysql json 判断某个key是否存在
  4. P3954 [NOIP2017 普及组] 成绩(python3实现)
  5. P1866 编号 python
  6. python中sort和sorted区别_Python中的 sort 和 sorted的用法与区别
  7. 稳压电源的设计与制作_电子爱好设计的直流可调压电源电路,太完美了,有图,亲测可用...
  8. JAVA笔记-Oracle中存储过程编写类似于MySQL的replace功能
  9. Java笔记-jdbc传输clob到Oracle数据库
  10. Qt文档阅读笔记-Qt工作笔记QProcess::finished的解析与实例