vjudge E 18歲生日 C語言

2021-10-05 02:54:51 字數 1399 閱讀 5903

description

gardon的18歲生日就要到了,他當然很開心,可是他突然想到乙個問題,是不是每個人從出生開始,到達18歲生日時所經過的天數都是一樣的呢?似乎並不全都是這樣,所以他想請你幫忙計算一下他和他的幾個朋友從出生到達18歲生日所經過的總天數,讓他好來比較一下。

input

乙個數t,後面t行每行有乙個日期,格式是yyyy-mm-dd。如我的生日是1988-03-07。

output

t行,每行乙個數,表示此人從出生到18歲生日所經過的天數。如果這個人沒有18歲生日,就輸出-1。

sample input

1

1988-03-07

sample output

思路

首先看到「如果這個人沒有18歲生日」這句話,我還是有點懵的,怎麼會有人沒有18歲生日。一開始,我有想到如果是2月29日出生,規定3月1日過生日,是不是當成乙個特列去算,糾結於這點常識,讓我無從下手。

但可以這麼想,2月29日出生的為閏年,18不是4的倍數,肯定是平年,不可能會有他的生日啊。這麼講可能不太嚴謹,但過於糾結就無法進行下一步。

跳過了這一點,寫起來就得心應手了,18年,有閏年就加366,有平年就加365,但具體這麼判斷呢。

366域365的差別就在於2月的不同,那麼2月必定會成為乙個分支,舉個例子,2023年3月1日出生的那麼到2023年的3月1日經過了365天,應為只有2月不同,跳過了2月,就只有365天了。而2023年2月20日出生到2023年2月20日經過了366天。

那麼我們可以得出結論,3月以前出生的到下乙個生日的天數取決於出生年份是不是閏年,從3月開始到下乙個生日的天數取決於出生年份的下一年是不是閏年。

這道題其實並不難,但一開始沒想清楚,所以多講幾句

code

#include

bool is_leap

(int x)

;//判斷是否為閏年的函式

intmain()

if(month<=2)

//分支,理由上面已經講過了

for(i=

0;i<

18;i++

)else

for(i=

1;i<=

18;i++

)printf

("%d\n"

,sum);}

}bool is_leap

(int x)

Gardon的18歲生日

問題 gardon的18歲生日就要到了,他當然很開心,可是他突然想到乙個問題,是不是每個人從出生開始,到達18歲生日時所經過的天數都是一樣的呢?似乎並不全都是這樣,所以他想請你幫忙計算一下他和他的幾個朋友從出生到達18歲生日所經過的總天數,讓他好來比較一下。輸入 乙個數t,後面t行每行有乙個日期,格...

18歲生日(閏年問題)

gardon的18歲生日就要到了,他當然很開心,可是他突然想到乙個問題,是不是每個人從出生開始,到達18歲生日時所經過的天數都是一樣的呢?似乎並不全都是這樣,所以他想請你幫忙計算一下他和他的幾個朋友從出生到達18歲生日所經過的總天數,讓他好來比較一下。乙個數t,後面t行每行有乙個日期,格式是yyyy...

18歲生日所經過的總天數

problem description gardon的18歲生日就要到了,他當然很開心,可是他突然想到乙個問題,是不是每個人從出生開始,到達18歲生日時所經過的天數都是一樣的呢?似乎並不全都是這樣,所以他想請你幫忙計算一下他和他的幾個朋友從出生到達18歲生日所經過的總天數,讓他好來比較一下。inpu...