日期蓝桥杯总结

关于日期,主要还是计算天数,形式会多变,但还是万变不离其中,我会记录两道关于日期类的题目,主要函数依然不变


总结:

int cal(int y,int m,int d)
{
	int days=d;
	bool isprime=0;
	int a[2][13]={0,31,28,31,30,31,30,31,31,30,31,30,31,
		          0,31,29,31,30,31,30,31,31,30,31,30,31};
	if(y%4==0&&y%100!=0||y%400==0)
	isprime=1;
	for(int i=0;i<m;i++)
	{
		days+=a[isprime][i];
	}
	return days;
}

1.高斯日记

大数学家高斯有个好习惯:无论如何都要记日记。
 
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210

后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?

高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。

高斯获得博士学位的那天日记上标着:8113   请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21

分析:这道题的话是给定日期与天数,去计算

下面是解决这道题的代码

#include<iostream>  

using namespace std;  

int m[2][12]={//闰平年对应的月份  

31,29,31,30,31,30,31,31,30,31,30,31,  

31,28,31,30,31,30,31,31,30,31,30,31  

};  

bool judge(int n)//判断是否是闰年  

{  

    if(n%400==0||(n%4==0&&n%100!=0)) return 1;  

    return 0;  

}  

int main()  

{  

    int n;  

    while(cin>>n)  

    {  

        int year=1777,month=4,day=30;  

        while(--n)  

        {  

            day++;//模拟天数  

            if(day>m[!judge(year)][month-1])//如果天数大于当前月份对应的天数月份加一  

            {  

                month++;  

                if(month>12)//如果月份大于12,年份加一,月份清成一  

                {  

                    year++;  

                    month=1;  

                }  

                day=1;//天数清成一  

            }  

        }  

        cout<<year<<"--"<<month<<"--"<<day<<endl;  

    }  
    return 0;  

}  
2.

1949年的国庆节(10月1日)是星期六。 

今年(2012)的国庆节是星期一。

那么,从建国到现在,有几次国庆节正好是星期日呢?

#include <iostream>
using namespace std;
int cal(int y,int m,int d)
{
	int days=d;
	bool isprime=0;
	int a[2][13]={0,31,28,31,30,31,30,31,31,30,31,30,31,
		          0,31,29,31,30,31,30,31,31,30,31,30,31};
	if(y%4==0&&y%100!=0||y%400==0)
	isprime=1;
	for(int i=0;i<m;i++)
	{
		days+=a[isprime][i];
	}
	return days;
}
int main()
{
	int total=cal(1949,12,31)-cal(1949,10,2);//注意题目上面写的是1949年10.1号是星期六,说明10月2日是星期天
	for(int i=1950;i<2012;i++)
	{
		total+=cal(i,10,1)-cal(i,1,1)+1;//这个+1是1.1号也算一天
	
		if((total)%7==0)
		{
			
			cout<<i<<endl;

		}
	}

	return 0;
}




猜你喜欢

转载自blog.csdn.net/eurus_/article/details/80208891