ccf日期計算python

2021-10-25 04:35:55 字數 2052 閱讀 7386

問題描述:給定乙個年份y和乙個整數d,問這一年的第d天是幾月幾日?注意閏年的2月有29天。滿足下面條件之一的是閏年:

1) 年份是4的整數倍,而且不是100的整數倍;2) 年份是400的整數倍。

輸入格式:輸入的第一行包含乙個整數y,表示年份,年份在1900到2015之間(包含1900和2015)。輸入的第二行包含乙個整數d,d在1至365之間。

輸出格式:輸出兩行,每行乙個整數,分別表示答案的月份和日期。

樣例輸入

2015

80樣例輸出3

21樣例輸入

2000

40樣例輸出2

9思路:這題比較簡單,是其我第二題中很快得滿分的一題。首先判斷是否為閏年,然後講12個月以及每月對應的天數組合在一起,閏年則2月29天,根據count來計算具體哪一天。不是閏年則2月28天,其他**一樣。

**:

y=int(input())

d=int(input())

count=0

if (y%4==0 and y%100!=0) | (y%400==0):

month = [(1, 31), (2, 29), (3, 31), (4, 30), (5, 31), (6, 30), (7, 31), (8, 31), (9, 30), (10, 31), (11, 30),(12, 31)]

for i in range(12):

count+=month[i][1]

if count>=d:

print(month[i][0])

day=d-(count-month[i][1])

print(day)

break

else:

month = [(1, 31), (2, 28), (3, 31), (4, 30), (5, 31), (6, 30), (7, 31), (8, 31), (9, 30), (10, 31), (11, 30),(12, 31)]

for i in range(12):

count += month[i][1]

if count >= d:

print(month[i][0])

day = d - (count - month[i][1])

print(day)

break

雖然得了滿分,但是可以看到有很多**是重複的。再此基礎上我稍加了修改,將**長度降到385:   

修改後的**是:

y=int(input())

d=int(input())

month = [[1, 31], [2, 28], [3, 31], [4, 30], [5, 31], [6, 30], [7, 31], [8, 31], [9, 30], [10, 31], [11, 30], [12, 31]]

count=0

if (y % 4 == 0 and y % 100 != 0) | (y % 400 == 0):

month[1][1] = 29

for i in range(12):

count+=month[i][1]

if count>=d:

print(month[i][0])

day=d-(count-month[i][1])

print(day)

break

這個題目做得快學到的東西也就不多,但有一點需要注意的是&與|兩邊的表示式一定要加括號,我第一次提交沒有加是80分。如果用and和or可以不加。這一點我刷題的時候掉過好幾次坑,要長點記性。

CCF 日期計算

問題描述 給定乙個年份y和乙個整數d,問這一年的第d天是幾月幾日?注意閏年的2月有29天。滿足下面條件之一的是閏年 1 年份是4的整數倍,而且不是100的整數倍 2 年份是400的整數倍。輸入格式 輸入的第一行包含乙個整數y,表示年份,年份在1900到2015之間 包含1900和2015 輸入的第二...

ccf試題 日期計算

問題描述 給定乙個年份y和乙個整數d,問這一年的第d天是幾月幾日?注意閏年的2月有29天。滿足下面條件之一的是閏年 1 年份是4的整數倍,而且不是100的整數倍 2 年份是400的整數倍。輸入格式 輸入的第一行包含乙個整數y,表示年份,年份在1900到2015之間 包含1900和2015 輸入的第二...

CCF真題之日期計算

201509 2 日期計算 問題描述 給定乙個年份y和乙個整數d,問這一年的第d天是幾月幾日?注意閏年的2月有29天。滿足下面條件之一的是閏年 1 年份是4的整數倍,而且不是100的整數倍 2 年份是400的整數倍。輸入格式 輸入的第一行包含乙個整數y,表示年份,年份在1900到2015之間 包含1...