一、問題描述
曾有人稱 1999 年 12 月 31 日是世界末日。當然該謠言已經不攻自破。
還有人稱今後的某個世紀末的 12 月 31 日,如果是星期一則會....
有趣的是,任何一個世紀末的年份的 12 月 31 日都不可能是星期一 !!
于是,“謠言制造商”又修改為星期日......
1999 年的 12 月 31 日是星期五,請問:未來哪一個離我們最近的一個世紀末年(即 xx99 年)的 12 月 31 日正好是星期天(即星期日)?
二、題目要求
考察
1.日期問題
2.建議用時10~20min
三、問題分析
這一題是一個日期問題,題目給出1999 年的 12 月 31 日是星期五,求出接下來最近的世紀末年。分成兩步解決,先求出每一個年份的天數,在求出目前年份的最後一天是不是星期天。
1.判斷年份
對于年份來說,首先判斷是不是閏年,根據閏年規則“四年一閏,百年不閏,四百年一閏”,年份滿足下列條件之一,則為閏年。
(1)能被4整除且不能被100整除(如2004年是閏年,而1900年不是)
(2)能被400整除(如2000年是閏年)
代碼實作 y%400==0||y%4==0&&y%100!=0
2.判斷日期
q=(q+d%7)%7;//判斷目前年份最後一天星期幾
if(q==0&&n%100==99)//滿足條件
{
cout<<n;//輸出結果
exit(0);//退出循環
}
四、編碼實作
#include<iostream>
using namespace std;
int main()
{
int i,n,d,q=5;//初始化,d代表目前年份天數,q代表星期幾
for(i=2000;;i++)//開始循環
{
n=i;
if(n%400==0||n%4==0&&n%100!=0)//判斷是否為閏年
{
d=366;
}
else
d=365;
q=(q+d%7)%7;//判斷目前年份最後一天星期幾
if(q==0&&n%100==99)//滿足條件
{
cout<<n;//輸出結果
exit(0);//退出循環
}
}
return 0;
}
五、輸出結果
輸出結果為:2299
