您的位置:首页 > 编程语言 > C语言/C++

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;
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
xuhang513 发布了13 篇原创文章 · 获赞 3 · 访问量 687 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐