末日重现~世纪末的星期日

诶嘿,请看下题

标题: 世纪末的星期
曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。
还有人称今后的某个世纪末的12月31日,如果是星期一则会…
有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!
于是,“谣言制造商”又修改为星期日…
1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?

请回答该年份(只写这个4位整数,不要写12月31等多余信息)

做这个题首先,我想的是一百年里有多少个闰年,然后我查了下1999到2099有多少个闰年,毕竟这个是和天数有关的对不对?
然后第二步,知道闰年是多少个了(平常每100年是24个闰年,每四个一百年就多了一个闰年)
更何况题目中是1999年开始,而2000年恰巧就是一个闰年,那么我们可以设有x个百年,平常就是一年365天,多出来的时间就是,每x多出24天,也就是天数是365 * 100 * x + x * 24;但是呢,还有25个闰年的时候呢。
x/4,这就是25个闰年的时候,余数如果大于零,那就还得加一天,如果是零,那就不用加1;
总之总之,代码如下:

#include <stdio.h>
int main()
{
    
    
	int start = 1999;
	int x;//x百年后会出现
	int day;//天数
	int yu;//yu = 余:是指总天数除以7之后余的天数 
	int a,b;
	for(x = 1;x<10000;x++)
	{
    
    
		day = x*100*365+x*24;
		a = x/4;//每四百年就有一次一百年中有25个闰年,平常是24个闰年 
		b = x%4;//第一个一百年里也是有25个闰年,多一天 
		if(b>0)
		{
    
    
			day = day + a + 1;
		 } 
		else{
    
    day = day + a;}
		yu = day%7;
		if(yu == 2)//余天数是两天的时候正好是周日 
		{
    
    
			break;
		}

	}
	printf("%d",start+x*100);
	
	 
}

代码运行如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/FG_future/article/details/112382114