AcWing 1341十三號星期五
阿新 • • 發佈:2021-01-30
題目描述:
十三號星期五真的很不常見嗎?
每個月的十三號是星期五的頻率是否比一週中的其他幾天低?
請編寫一個程式,計算NN年內每個月的1313號是星期日,星期一,星期二,星期三,星期四,星期五和星期六的頻率。
測試的時間段將會開始於19001900年11月11日,結束於1900+N−11900+N−1年1212月3131日。
一些有助於你解題的額外資訊:
- 19001900年11月11日是星期一。
- 在一年中,44月、66月、99月、1111月每個月3030天,22月平年2828天,閏年2929天,其他月份每個月31天。
- 公曆年份是44的倍數且不是100100的倍數的年份為閏年,例如19921992年是閏年,19901990年不是閏年。
- 公曆年份是整百數並且是400400的倍數的也是閏年,例如1700年,1800年,1900年,2100年不是閏年,2000年是閏年。
輸入格式
共一行,包含一個整數NN。
輸出格式
共一行,包含七個整數,整數之間用一個空格隔開,依次表示星期六,星期日,星期一,星期二,星期三,星期四,星期五在十三號出現的次數。
資料範圍
1≤N≤4001≤N≤400
輸入樣例:
20
輸出樣例:
36 33 34 33 35 35 34
#include <iostream> #include <cstdio> using namespace std; int year[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}}; int judge(int x) { return (x % 4 == 0 && x % 100 != 0) || (x % 400 == 0); } int n; int mon, tue, wed, thu, fri, sta, sun; int a[9]; int main() { scanf("%d", &n); int cou = 0; for(int y = 1900; y < 1900 + n; y++) { int yy = 0; if(judge(y)) yy = 1; else yy = 0; for(int m = 1; m <= 12; m ++) { for(int d = 1; d <= year[yy][m]; d++) { cou++; cou = cou % 7; if(d == 13) a[cou] ++; } } } printf("%d ", a[6]); for(int i = 0; i <= 5; i++) printf("%d ", a[i]); printf("\n"); return 0; }