老师的最后一关"/>
问题 C: 沈老师的最后一关
题目描述:
安杰好不容易搬完了弹药,没想到沈老师还不打算放过他。除非,他能回答沈老师一个问题。这个问题很简单:已知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
分析:
1.他给的数据最小的是1599年1月1日,不知道这一天是星期几
2.推算给的日期离1599年1月1日差的日子
3.把这个日子模7
4.注意闰年差366天和2月29天28天的区分
5.最后求出来的星期和当前星期差几天他前面 补上加几天 (求出2020/2/27是星期天)距离星期4差4天 所以说要给前面的加 上4天。
6.星期天显示的是7不是0(比赛的时候忘记了)
最后的AC:
#include<bits/stdc++.h>
int Day(int aa,int bb,int cc){int tt=0;int a[]={31,28,31,30,31,30,31,31,30,31,30};for(int i=1599;i<=aa;i++){if( i%400==0||i%100!=0&&i%4==0){tt++; }}for(int i=0;i<bb-1;i++){cc=cc+a[i];}if((aa%400==0||aa%100!=0&&aa%4==0)&&bb<3){tt--; }return 365*(aa-1599)+tt+cc;
}
int main() {int i;int nian,yue,ri;int w=0; while(~scanf("%d%d%d",&nian,&yue,&ri)){w=Day(nian,yue,ri);w=w%7;if(w!=0){printf("%d\n",w); }else{printf("7\n");}}return 0;
}
更多推荐
问题 C: 沈老师的最后一关
发布评论