日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

百练OJ:2964:日历问题

發(fā)布時間:2025/3/19 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 百练OJ:2964:日历问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目鏈接:

2964日歷問題

描述:在我們現(xiàn)在使用的日歷中, 閏年被定義為能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它們不是閏年。例如:1700, 1800, 1900 和 2100 不是閏年,而 1600, 2000 和 2400是閏年。 給定從公元2000年1月1日開始逝去的天數(shù),你的任務(wù)是給出這一天是哪年哪月哪日星期幾。
輸入:輸入包含若干行,每行包含一個正整數(shù),表示從2000年1月1日開始逝去的天數(shù)。輸入最后一行是?1, 不必處理。可以假設(shè)結(jié)果的年份不會超過9999。
輸出:對每個測試樣例,輸出一行,該行包含對應(yīng)的日期和星期幾。格式為“YYYY-MM-DD DayOfWeek”, 其中 “DayOfWeek” 必須是下面中的一個: "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" 或 "Saturday“。
樣例輸入
??? 1730
??? 1740
??? 1750
??? 1751
??? -1
樣例輸出
??? 2004-09-26 Sunday
??? 2004-10-06 Wednesday
??? 2004-10-16 Saturday
??? 2004-10-17 Sunday
提示:2000.1.1. 是星期六


解題思路:

這道題目使用的背景知識是閏年的定義和公歷日歷中一年 12 個月中每個月的日期數(shù)。根據(jù)題目要求,所有涉及的數(shù)值都是用整數(shù)可以表示的。這個問題可以分解成兩個彼此獨立的問題:一個是要求的那天是星期幾,另一是要求的那天是哪年哪月那天。第一個問題比較簡單,知道 2000 年 1 月 1 日是星期幾后,只要用給定的日期對 7 取模,就可以知道要求的一天是星期幾。第二個問題相對麻煩一些。我們用 year, month, date 分別表示要求的日期的年、月、日。當輸入一個整數(shù) n 時,如果 n 大于等于一年的天數(shù),就用 n 減去一年的天數(shù),直到 n 比一年的天數(shù)少(這時假設(shè)剩下天數(shù)為 m),一共減去多少年 year 就等于多少;如果 m 大于等于一個月的天數(shù),就用 m 減去一個月的天數(shù),直到 m 比一個月的天數(shù)少(這時假設(shè)剩下的天數(shù)為 k),一共減去多少個月 month 就等于多少;這時 k 為從當月開始逝去的天數(shù),k+1 就是要求的 date。這里減去一年的天數(shù)時要判斷當年是否是閏年,減去一月時要判斷當月有幾天。

解題代碼:


#include <iostream> #include <string> using namespace std; int getDayOfcurrentYear(int i); int ifrunnian(int year); int main() {string weeks[7]={"Saturday","Sunday", "Monday","Tuesday", "Wednesday", "Thursday", "Friday"};int months1[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int months2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};while(1){int n;cin>>n;if(n==-1)break;int week=n%7;int year=2000,month=1;while(n>=getDayOfcurrentYear(ifrunnian(year))){n=n-getDayOfcurrentYear(ifrunnian(year));year++;}if(ifrunnian(year)==1){while(n>=months2[month]){n=n-months2[month];month++;}}else{while(n>=months1[month]){n=n-months1[month];month++;}}int day=n+1;if(month<10){if(day<10){cout<<year<<"-0"<<month<<"-0"<<day<<" "<<weeks[week]<<endl;}else{cout<<year<<"-0"<<month<<"-"<<day<<" "<<weeks[week]<<endl;}}else{if(day<10){cout<<year<<"-"<<month<<"-0"<<day<<" "<<weeks[week]<<endl;}else{cout<<year<<"-"<<month<<"-"<<day<<" "<<weeks[week]<<endl;}}}return 0;} int ifrunnian(int year){bool b=true;if(year%4!=0){b=false;}else{if(year%100==0 && year%400!=0){b=false;}}if(b){return 1;}else{return 0;} }int getDayOfcurrentYear(int i){if(i==1)return 366;else return 365; }

總結(jié)

以上是生活随笔為你收集整理的百练OJ:2964:日历问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。