题目大意就是一年中某个月的13号正好是星期五的话,就寓意不详,称黑色星期五
输入:年份
输出:日期
如果能根据任意给出的一个日期判断出它是星期几,这个问题就很好解决了,java中有封装好的类库可以实现已知日期得到星期几,c++中的没有了解,网上也有很多不同的解决方法,这里用了一个十分讨巧的办法,日后学习了其他方法再更新。
通过日期得到星期可以用基姆拉尔森公式得到
约定下式中 y-年,m-月,d-日,w-星期
w=(d+m*2+3*(m+1)/5+y+y/4-y/100+y/400)mod7
特别需要注意的是,当月份为1月或者二月是,日期需要有所变动
举个栗子,如果是1993-1-13,带入上面公式的日期需要变换为 1992-13-13
如果是1993-2-13,那么需要变换为 1992-14-13
至于为什么博主也没有进一步了解,有兴趣的可以自行查询一下
代码:
bool check(int y,int m,int d){
if(m==1||m==2){
m+=12;
y--;
}
int w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
if(w==4){
return true;
}else{
return false;
}
}
int main(){
int year;
cin>>year;
int i;
for(i=1;i<=12;i++){
if(check(year,i,13)){
cout<<year<<":"<<i<<":13"<<endl;
}
}
}
测试用例:
输入 :
1998
输出:
1998:2:13
1998:3:13
1998:11:13