日期的计算

经常会遇到别人问你几月几号是星期几的情况,如何不查日历,直接用程序算出来呢?一种最简单的方法是,记住很久以前的某一天是星期几,比如公元 1 年 1 月 1 日是星期一。然后一天一天模拟,算出日期是星期几。这种方法容易理解,但是实现起来代码可能比较长。除此之外,有一个公式可以快速地根据日期计算这一天是星期几,这被称为 蔡基姆拉尔森计算公式

假设星期为 w, 年份为 y, 月份为 m, 日期为 d:

w=(d+2×m+3×(m+1)/5+y+y/4−y/100+y/400)%7

然后把计算出来的 w 加上 1 就是真正的星期几了。

注意每年的 1,2 月要当成上一年 13,14 月计算,上述的除法均为整除

蒜头君的生日

蒜头君的生日快到了,蒜头君希望是在周末,蒜头君请你帮忙算出他生日在星期几。

代码

#include <iostream>
#include <string>
using namespace std;
string weekdays[7] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
int whatday(int y, int m, int d)
{m == 1 && (m = 13, y -= 1);m == 2 && (m = 14, y -= 1);return (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
}
int main() {int y, m, d;cin >> y >> m >> d;cout << weekdays[whatday(y, m, d)] << endl;return 0;
}

蒜头君和花椰妹谈恋爱啦

蒜头君和花椰妹谈恋爱啦。祝福他们吧。蒜头君想知道第他们的第100天,200天…纪念日。

输入格式

输入格式 输入 4 个整数 y,m,d,k表示他们在一起的日期,保证是一是一个 1900 年 1 月 1 日以后的日期,蒜头君想知道他们的 k(0≤k≤10000)天纪念日。

代码

#include <iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
//日期结构体
typedef struct
{int y;int m;int d;
}day;
int m[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31}};
//判断是否为闰年
int isrunyear(int year)
{if(year %400 ==0 || (year%100!=0 && year%4 ==0))return 1;elsereturn 0;
}
//获取n天后的日期
day getDate(day p,int n)
{while(n){//如果当月未满,天数++if( p.d < m[isrunyear(p.y)][p.m]){p.d++;}//如果当月的天数满了并且当月不是12月else if(p.m !=12 && p.d == m[isrunyear(p.y)][p.m]){p.d = 1;p.m++;}//如果是这一年的最后一天了else if(p.m == 12 && p.d == 31){p.y++;p.m = 1;p.d = 1;}n--;//时间往前走了一天,n自减}return p;
}
int main()
{day p;int n;cin>>p.y>>p.m>>p.d>>n;p = getDate(p,n);cout<<p.y<<"-";p.m<10 && cout<<0;cout<<p.m<<"-";p.d<10 && cout<<0;cout<<p.d<<endl;return 0;
}

节假日

日历有 阳历(公历) 和 阴历(农历) 之分。每年都有法定节假日,这些分成三类—双休、阳历节假日、阴历节假日。

双休1)周六和周日 2 天阳历节假日1)元旦:阳历每年 1 月 1 日,放假 1 天2)劳动节:阳历每年 5 月 1 日,放假 1 天3)国庆节:阳历每年 10 月 1 日,放假 3 天4)圣诞节:阳历每年 12 月 25 日,放假 1 天阴历节假日1)春节:阴历每年 1 月 1 日,放假 3 天2)清明节:阳历每年 4 月 4 - 6 日之间的某天,放假 1 天3)端午节:阴历每年 5 月 5 日,放假 1 天4)中秋节:阴历每年 8 月 15 日, 放假 1 天

当节假日和双休重合时,双休 不延后 也 不提前,保证节假日之间不会重合。现在给你某年的所有阴历节假日的 阳历 日期,以及当年的 1 月 1 日是星期几,请你计算出这一年(阳历 1 月 1 日到 12 月 31 日)放了多少天假(包括双休、阳历节假日和阴历节假日)。

输入格式

第一行输入年份 y(1900<y≤2050)。

接下来 4 行,每行输入两个整数,m,d, 分别表示春节、清明节、端午节和中秋节的阳历日期。

最后一行一个整数表示当年 1 月 1 号是星期几(一周内的第几天,每周从星期一开始计数,即星期一为第一天)。

输出格式

输出一个整数,表示当年放假的天数。

样例输入

2017
1 28
4 4
5 30
10 4
7

样例输出

113

解题思路

定义一个数组days[],里面的每个元素表示这一年中的每一天,初始时全部元素为0。
对数组进行遍历,先把阴历,阳历节日的日子进行置1。
再将所有的周六周日置1。
最后对days数组求和输出即可。

代码

#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
int days[367];
//判断是否为闰年
int isrunnian(int n)
{if(n%400==0 || (n%100!=0 && n%4==0))return 1;elsereturn 0;
}
//计算当年的总天数
int alldays(int n)
{if(isrunnian(n))return 366;elsereturn 365;
}
//计算这一天在这一年中排第几天
int getsnumday(int year,int m,int d)
{int mm[2][14] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};int ret = 0;for(int i=1;i<=m-1;i++)ret += mm[isrunnian(year)][i];ret += d;return ret;
}
int main()
{int year;cin>>year;//输入四个节日int x1,y1,x2,y2,x3,y3,x4,y4;cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4;int start;//第一天是周几cin>>start;int n1,n2;switch(start){case 1:n1=6;n2=7;break;//当年第一个周六周日为6,7case 2:n1=5;n2=6;break;//当年第一个周六周日为5,6case 3:n1=4;n2=5;break;//当年第一个周六周日为4,5case 4:n1=3;n2=4;break;//当年第一个周六周日为3,4case 5:n1=2;n2=3;break;//当年第一个周六周日为2,3case 6:n1=1;n2=2;break;//当年第一个周六周日为1,2case 7:n1=1;n2=7;break;//当年第一个周六周日为1,7}//先把阳历节日的days[]置为1days[1] = 1;//元旦节1月1日days[getsnumday(year,5,1)] = 1;//劳动节,5月1日days[getsnumday(year,10,1)] = days[getsnumday(year,10,2)] = days[getsnumday(year,10,3)] = 1;//国庆节,放假3天days[getsnumday(year,12,25)] = 1;//圣诞节放假1天//阴历节假日days[getsnumday(year,x1,y1)] = days[getsnumday(year,x1,y1+1)] = days[getsnumday(year,x1,y1+2)] = 1;//春节3天days[getsnumday(year,x2,y2)] = 1;//清明节放假1天days[getsnumday(year,x3,y3)] = 1;//端午节放假1天days[getsnumday(year,x4,y4)] = 1;//中秋节放假1天//周六周日for(int i=1;i<=alldays(year);i++)if(i%7 == n1%7 || i%7 == n2%7)days[i] = 1;//统计多少个房价日int sum =0;for(int i=1;i<=alldays(year);i++)sum += days[i];cout<<sum;return 0;
}

蓝桥杯省赛训练营——日期的计算相关推荐

  1. 2017蓝桥杯省赛---java---B---7(日期问题)

    题目描述 日期问题 标题:日期问题小明正在整理一批历史文献.这些历史文献中出现了很多日期.小明知道这些日期都在1960年1月1日至2059年12月31日.令小明头疼的是,这些日期采用的格式非常不统一, ...

  2. 2017蓝桥杯c语言C组承压计算,2017蓝桥杯 省赛C题(承压计算)

    X星球的高科技实验室中整齐地堆放着某批珍贵金属原料. 每块金属原料的外形.尺寸完全一致,但重量不同. 金属材料被严格地堆放成金字塔形. 7 5 8 7 8 8 9 2 7 2 8 1 4 9 1 8 ...

  3. 3位水仙花数计算pythonoj_Python解答蓝桥杯省赛真题之从入门到真题

    若发现此文章消失,则是在等待审核中,稍等一会儿即可显示,谢谢. 另外,我会尽量晚上上传更新题目. 此文章太长了,导致MD编辑器很卡,另写了一篇接续 传送门 Python解答蓝桥杯省赛真题之从入门到真题 ...

  4. 2020蓝桥杯省赛B组C++(第二场)真题

    心得体会 前面总结了很多历届的省赛真题,这次终于轮到自己上战场上体验真题啦~为此次蓝桥杯省赛也是准备了一两周时间,听说比较水,题不是很难,会暴力就能拿奖哈哈哈考完确实有点这样的感觉,但是能把五个填空题 ...

  5. [第四届蓝桥杯省赛C++B组]省赛全题目题解

    文章目录 快速分支通道 1.高斯日记 来源: 第四届蓝桥杯省赛C++A/B组 算法标签 模拟 题目描述 输出格式 思路 CPP代码 2.马虎的算式 题目描述: 算法标签: 枚举 题目答案: 题目思路: ...

  6. 2022年十三届蓝桥杯国赛(C/C++大学B组)个人题解

    2022年十三届蓝桥杯国赛(C/C++大学B组)个人题解 更新:成绩出来了,估分50分左右,最后拿了个国二,还差点到国一,有点出乎意料,挺满意了挺满意了. 去年国赛基本都是暴力,最后国三都没拿到(我是 ...

  7. 2018年第九届蓝桥杯省赛C/C++ A组(蒻鸡自己写的,看不上勿喷,自己的一点想法)

    第一题 标题:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + -. 每项是前一项的一半,如果一共有20项, 求这个和是多少,结果用分数表示出来. 类似: 3/2 当然,这只是加了前 ...

  8. 第十二届蓝桥杯国赛真题+题解 Python

    文章目录 写在前面 试题A:带宽 试题 B: 纯质数 试题C: 完全日期 试题D: 最小权值 试题 E: 大写 试题 F: 123 试题 G: 冰山 试题 H: 和与乘积 试题 I: 二进制问题 试题 ...

  9. 【蓝桥杯备赛】历年真题解答+知识点总结

    文章目录 历年真题 算法思维 1. 模拟 1.1日期处理 1.1.1 解法一:win自带的计算器 1.1.2 解法二:Excel+手算 1.1.3 解法三:代码实现 1.2 全排列 1.3 判断回文数 ...

  10. 蓝桥杯国赛C++A组B组题解整理(第八、七、六、五、四届)

    [写在前面的话19.04.04] 今年省赛的结果出的意外得快,有很多小伙伴来和我分享他们进了省一的喜悦,并问我啥时候更新国赛题解,emmm--不是我不想更新,实在是抽不出时间,有缘再更--虽然不更新题 ...

最新文章

  1. 如何通俗易懂地向别人解释React生命周期方法?
  2. 可以分屏吗_LED透明屏分屏是怎么一回事?
  3. 字节流复制文本文件【应用】
  4. sublimelinter-php 错误代码提示
  5. 技术晨读_20160215
  6. docker 部分常用镜像下载及安装
  7. c语言编程智能交通灯系统,智能交通灯控制系统的研究
  8. 13个不错的jquery图片放大器效果
  9. 海康威视sdk语音转发(实现)implementation ‘com.hikvision.ezviz:ezviz-sdk:4.8.3‘(修改)
  10. 华为电脑和手机一碰传_华为手机怎么一碰传文件到电脑教程
  11. java自己写母版_Java 创建并用应用幻灯片母版
  12. emmx文件用什么软件打开电脑_我告诉你emmx文件怎么打开
  13. php简单论坛登录注册,php登录注册求救
  14. UVa1395(最小值最小生成树+并查集)
  15. php开源文档共享,几款常见的PHP开源文档管理系统介绍_PHP教程
  16. 开源库存管理php,GitHub - wofengliming/stock: ThinkPHP库存管理
  17. 麻辣GIS源码的github下载与调试
  18. 去摆摊吧,落魄的Java程序员(转载)
  19. 超简单:好看的电子相册制作!
  20. 鸿合怎么删掉linux6_鸿合电子白板使用手册(共6页)

热门文章

  1. plpgsql 编译执行
  2. 一卡通系统软件测试,智能一卡通管理系统检测流程
  3. 联创机房管理系统服务器密码,高校机房管理系统解决方案.doc
  4. 计算几何(基础部分)
  5. 产品经理/技术总监的能力模型
  6. Xilinx_JESD204B
  7. 20款最好的jQuery文件上传插件
  8. abp框架java_asp.net core之abp框架
  9. 【学习中】layui前端框架
  10. lol官网服务器维修啥意思,英雄联盟5.6维护 lol官网服务器维护公告