黑色星期五

题目大意就是一年中某个月的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

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值