C++沈老师的最后一关(日期计算)
2020-03-08 13:22
1101 查看
题目描述
安杰好不容易搬完了弹药,没想到沈老师还不打算放过他。除非,他能回答沈老师一个问题。这个问题很简单:已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?
注意考虑闰年的情况。尤其是逢百年不闰,逢400年闰的情况。
安杰非常愚钝,你能帮助他吗?
输入
输入只有一行
YYYY MM DD
1599 <= YYYY <= 2999
1 <= MM <= 12
1 <= DD <= 31,且确保测试样例中YYYY年MM月DD日是一个合理日期
输出
输出只有一行
W
1 <= W <= 7,分别代表周一到周日
样例输入 Copy
2011 11 11
样例输出 Copy
5
思路就是计算两个日期的总和去相减,为了更加方便,我打开电脑的日期功能,查到2012年1月1日是星期天。,
有一个坑点,就是那一段很长的if
#include<bits/stdc++.h> using namespace std; int day1[15]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int day2[15]={0,31,29,31,30,31,30,31,31,30,31,30,31}; bool leap(int year){ if (year % 400 == 0 || (year % 4 == 0 && (year % 100 != 0))) { return 1; } else { return 0; } } long long sum1=1,sum2; void init(){ for(int i=1599;i<2012;i++){ if(leap(i))sum1+=366; else sum1+=365; } } int main() { int year,mon,day; init(); while(~scanf("%d%d%d",&year,&mon,&day)){ sum2=day; for(int i=1599;i<year;i++){ if(leap(i))sum2+=366; else sum2+=365; } for(int i=1;i<mon;i++){ if(leap(year))sum2+=day2[i]; else sum2+=day1[i]; } int k; if(sum2>=sum1){ k=(sum2-sum1+7)%7; } else { k=abs(sum1-sum2+7)%7; if(k==1)k=6; else if(k==2)k=5; else if(k==3)k=4; else if(k==4)k=3; else if(k==5)k=2; else if(k==6)k=1; } if(k==0)k=7; cout<<k<<endl; } return 0; }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 计算日期差 —— C++
- [置顶] js日期处理---计算自然月、指定自然月某一天、获取前一天和后一天、判断闰年、当月最后一天日期、月末最后一天
- c/c++日期时间的计算程序
- C++Switch语句实现输入日期计算为改年的第几天
- 计算两个日期之间的天数差C++/java
- 计算两个日期之间的天数(C++)
- C++之日期的计算
- C/C++完成两个日期之间相隔天数的计算
- C/C++日期时间使用方法,struct tm, time_t, clock_t,计算循环所用时间
- C++:利用如下公式,编写函数计算∏的值,直到最后一项的绝对值小于e,主程序接收从键盘输入的e,输出∏的值(保留5位小数)。 ∏/4 = 1-1/3+1/5-1/7...
- 【日期时间】批处理计算上个月最后一天的日期
- 批处理bat计算上个月最后一天的日期
- 使用 T-SQL 计算当日日期、本周第一天与最后一天
- 第四届 蓝桥杯C/C++ B组 第1题 高斯日记 日期计算
- Java 时间工具类(计算距离现在多久、返回某个日期的前一天、 返回当月最后一天的日期、获取当前时间到凌晨还剩多少毫秒、获取当前时间前一个月第一天......)
- 【c++程序】任意给两个日期,计算相差多少天和各自星期几
- c++的万年历类,支持显示某月月历与某年年历,支持计算任意两个日期的间隔天数
- ZOJ 1205题解本来是一道大数运算水题,可是却纠结了很久,原因是没能真正读懂题意,要求的计算必须是一一对应输出即使前面出现几个0最后也要把前面的0输出,看别人用C++自己还是两个都提交了结果还是C占的内存少。
- JS 获取当天所在月的最后一天日期,所在周的每天的日期,时间的计算
- C/C++复习:计算该日期是本年中的第几天(优化版2)