HDU 6112黑色星期五 蓝桥基拉姆森公式
若某個月13號恰好是星期五,則這一天被稱為黑色星期五。已知某年的一月一日是星期w,并且這一年是閏年,
求出這一年所有13號那天是星期5的月份,按從小到大的順序輸出月份數字。(w=1..7)輸入輸入有多組,每組一行且為一個整數w, 指該年的一月一日是星期w。(1<=w<=7)輸出
每組數據輸出一行,從小到大輸出具有黑色星期五的月份,月份與月份之間用空格隔開。若沒有月份具有黑色星期五,則輸出NULL
?
用基姆拉爾森公式得到
約定下式中 y-年,m-月,d-日,w-星期
w=(d+m*2+3*(m+1)/5+y+y/4-y/100+y/400+1)mod7
特別需要注意的是,當月份為1月或者二月是,日期需要有所變動
舉個栗子,如果是1993-1-13,帶入上面公式的日期需要變換為 1992-13-13
如果是1993-2-13,那么需要變換為 1992-14-13
注意:w==0?7:w
#include<cstdio>
using namespace std;
int m[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
int main()
{
? ? int mon;
? ? while(scanf("%d",&mon) == 1)
? ? {
? ? ? ?for(int i = 1; i <= 12; i ++)
? ? ? ?{
? ? ? ? ? ? ? ?if((12+mon)%7 == 5)
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ?printf("%d",i);
? ? ? ? ? ? ? ? ? ?if(i != 12) printf(" ");
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?mon = (m[i]+mon)%7;?
? ? ? ?}?
? ? ? ?printf("/n");?
? ? }
? ? return 0;
}
HDU 6112:
?
今天是2017年8月6日,農歷閏六月十五。
小度獨自憑欄,望著一輪圓月,發出了“今夕何夕,見此良人”的寂寞感慨。
為了排遣郁結,它決定思考一個數學問題:接下來最近的哪一年里的同一個日子,和今天的星期數一樣?比如今天是8月6日,星期日。下一個也是星期日的8月6日發生在2023年。
小貼士:在公歷中,能被4整除但不能被100整除,或能被400整除的年份即為閏年。
?
?
Input
第一行為T,表示輸入數據組數。
每組數據包含一個日期,格式為YYYY-MM-DD。
1 ≤ T ≤ 10000
YYYY ≥ 2017
日期一定是個合法的日期
?
?
?
Output
對每組數據輸出答案年份,題目保證答案不會超過四位數。
?
?
Sample Input
3 2017-08-06 2017-08-07 2018-01-01
?
?
Sample Output
2023 2023 2024
?
?
Source
2017"百度之星"程序設計大賽 - 初賽(A)
?
#include <iostream> #include <cstring> #include <cstdio> using namespace std; int YYY,MM,DD,t; bool run_year(int y) {if(y%4==0&&y%100!=0||y%400==0){return true;}return false; } bool panduan2(int y) {if(!run_year(y)&&run_year(YYY)&&MM==2&&DD==29)return true; return false; } int panduan1(int y,int m,int d) {if(m==1||m==2){y-=1;m+=12;}int w=(d+m*2+(m+1)*3/5+y+y/4+y/400-y/100+1)%7;return w==0?7:w; }int main(){int Y,M,w;cin>>t;while(t--){cin>>YYY; getchar();cin>>MM; getchar();cin>>DD; getchar();w=panduan1(YYY,MM,DD);int ww;for(int i=YYY+1; ;++i){if(panduan2(i))//在這兒要對一個閏年的2-29號特殊判斷一下 continue; ww=panduan1(i,MM,DD);if(w==ww){cout<<i<<endl;break;}}}return 0; }output
standard output
已知 2011 年 11 月 11 日是星期五,問 YYYY 年 MM 月 DD 日是星期幾?注意考慮閏年的情況。尤其是逢百年不閏,逢 400 年閏的情況。
Input
輸入只有一行 YYYY MM DD
Output
輸出只有一行 W
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7+1?
(計算出的結果直接是對應的星期幾) ,當month=1或2時,需要將其改為month+12并且year-1
?
總結
以上是生活随笔為你收集整理的HDU 6112黑色星期五 蓝桥基拉姆森公式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 历届试题 快速排序:
- 下一篇: uva10562