藍橋杯訓練5 B 日期計算

2021-10-02 15:34:03 字數 2544 閱讀 8021

已知 2011 年 11 月 11 日是星期五,問 yyy

yyyyy

yyyy

年 mm

mmmm

月 dd

dddd

日是星期幾?注意考慮閏年的情況。尤其是逢百年不閏,逢 400 年閏的情況。

input

輸入只有一行 yyyy mm dd

output

輸出只有一行 w

input

2011 11 11

output

5note

1599≤y

yyy≤

2999

1599 \le yyyy \le 2999

1599≤y

yyy≤

2999

1 ≤m

m≤

121 \le mm \le 12

1≤mm≤121≤

dd≤31

1 \le dd \le 31

1≤dd≤3

1,且確保測試樣例中 yyyy 年 mm 月 dd 日是乙個合理日期

1 ≤w

≤7

1 \le w \le 7

1≤w≤

7,分別代表周一到週日

做題過程:

做完直接瘋了……這種日期的題目太折磨人了,&

&\&\&

&&寫成 ∣∣||

∣∣找了一晚上bug。

解題方法就是求出兩個日期之間的天數差。嘗試了幾種求天數的方法,下面這種我覺得最簡單,假設兩個時間點為 a

aa 和 b

bb 並且 a≤b

a\le b

a≤b,記 a

aa 那一年已經過去的天數為 a

aa,b

bb 那一年還沒過的天數為 b

bb,a

aa 年到 b

bb 年的總天數(包括a

aa 那年和 b

bb 那年)為 sum

sumsu

m,所以 天數差 ans

=sum

−a−b

ans=sum-a-b

ans=su

m−a−

b 至於換成星期幾,題目給出的日期在2011.11.11之前和在2011.11.11之後的計算方法是不一樣的,簡單的方法是記下乙個週期 t

tt ,模 7

77 之後直接作為下標輸出 t[a

ns%7

]t[ans\%7]

t[ans%

7]。日期大

:t1[

7]=;

日期大: t_1[7] = \;

日期大:t1

​[7]

=;日 期小

:t2[

7]=;

日期小:t2[7] = \;

日期小:t2

[7]=

;code:

#include

#define io ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);

using

namespace std;

typedef

long

long ll;

struct node};

int mon[13]

=;bool

judge

(int y)

//判斷閏年

intmain()

int sum1 =

0, sum2 =0;

for(

int i = a.y; i <= b.y; i++

)for

(int i =

1; i < a.m; i++

) sum2 +

= a.d;

for(

int i = b.m; i <=

12; i++

) sum2 -

= b.d;

int ans = sum1 - sum2;

ans %=7

;int t1[7]

=;int t2[7]

=;//這種方式比較好理解

if(flag)

//flag是true表示輸入的日期大

cout << t1[ans]

<< endl;

else

cout << t2[ans]

<< endl;

//下面這種方式也行

// if (flag)

// cout << (ans + 4) % 7 + 1 << endl;

// else

// cout << 7 - ((ans + 2) % 7) << endl;

return0;

}

藍橋杯 日期計算

演算法提高 日期計算 時間限制 1.0s 記憶體限制 256.0mb 問題描述 已知2011年11月11日是星期五,問yyyy年mm月dd日是星期幾?注意考慮閏年的情況。尤其是逢百年不閏,逢400年閏的情況。輸入格式 輸入只有一行 yyyy mm dd 輸出格式 輸出只有一行 w 資料規模和約定 1...

藍橋杯 日期計算

問題描述 已知2011年11月11日是星期五,問yyyy年mm月dd日是星期幾?注意考慮閏年的情況。尤其是逢百年不閏,逢400年閏的情況。輸入格式 輸入只有一行 yyyy mm dd 輸出格式 輸出只有一行 w樣例輸入 2011 11 11 樣例輸出 資料規模和約定 1599 yyyy 2999 1...

計蒜客 藍橋杯模擬賽5 B組 部分題解

傳送門 d 快速冪,理解到原理,然後寫個2,2判斷下應該怎麼走即可 ans int res pw x,y 1,p pw x,y 1,p p e 因為產生0的原因只能值2 和 5的結合,有乙個結合就會多乙個零,但是我們可以注意到2的數量比5的多很多,所以直接數n 的階乘會產生多少個5即可 ans an...