東華oj 高階題第53題 求n天後的日期

2021-10-03 16:46:51 字數 2606 閱讀 8373

53 求n天後的日期

問題描述 :

寫乙個函式,傳入年月日,計算它的第二天,並返回該日期。由使用者輸入年月日和乙個n值,使用前述函式,計算該日期加n天的日期為多少。

輸入說明 :

輸入year,month,day和n共4個正整數,以空格分隔。n的值不超過2000。 輸出說明 :

輸出計算得到的結果年月日共3個正整數,整數之間以乙個空格分隔,行首與行尾無多餘空格。 輸入範例 : 2000 1 1 366

輸出範例 : 2001 1 1

原來的**:

/*

t53 求n天後的日期

*/#include

intisleapyear

(int year)

;void

countdate

(int year,

int month,

int day,

int n)

;int daysinmonth[13]

=;intmain()

// 計算某年某月某日n天後是什麼日期

void

countdate

(int year,

int month,

int day,

int n)

days +

= day;

// 計算距離本月初過了多少天

days +

= n;

// 從本年1月1日開始計算

if(days >=

366)

else

continue;}

if(days <

365)}}

if(days ==0)

else

if(days <=31)

else

break;}

else

if(days ==29)

else

}break;}

else

if(days <30)

}}if(days ==0)

else

}// 判斷閏年

intisleapyear

(int year)

這個題我還以為很簡單,結果……

害,寫不下去了,決定換種思路寫……

可以將原始月剩餘的天數補上,然後將原始年剩餘的月補上,然後從下一年開始一年一年算(總有一年中的某個月的天數會大於當前剩餘天數),換種思路果然流暢多了,即使依然踩了很多坑

ac**:

/*

t53 求n天後的日期

*/#include

intisleapyear

(int year)

;void

countdate

(int year,

int month,

int day,

int n)

;int daysinmonth[13]

=;intmain()

// 計算某年某月某日n天後是什麼日期

// 題中的2023年1月1日過了366天為2023年1月1日的意思是不把2023年1月1日算上

void

countdate

(int year,

int month,

int day,

int n)

else

daysinmonth[2]

=28;// 閏年特殊處理之後要重置2月天數

// 再將本年餘下的月補上

for(i = month +

1; i <=

12; i++

)else

daysinmonth[2]

=28;// 閏年特殊處理之後要重置2月天數

}// 從下一年開始,一年一年的算

for(i = year +

1; i <= year +

6; i++

)else

daysinmonth[2]

=28;// 閏年特殊處理之後要重置2月天數}}

}// 判斷閏年

intisleapyear

(int year)

踩的坑:

daysinmonth[i] = 29; 其中的daysinmonth[i]用完之後沒有將其daysinmonth[2]重置,這樣後面預設2月就是29天了,這顯然是錯的

下一年開始的時候我把上面寫過的**複製過去了(因為可以重用),但是我沒有改!!!,害

複製過去之後下面那個框框中的i我沒有換成j,導致後面輸出很奇怪……

從這個題我學到了:

冷靜分析,有些思路要不得

重用**要特別注意修改,不然很容易出錯!

東華oj 高階題第11題

11 abc數字 問題描述 明明的爸爸是一位著名的數學家同時也是一位著名的數學啟蒙老師。他經常出一些簡單而有趣的數學題目來給剛剛接觸數學的小朋友做,培養他們對數學的興趣。一天,明明的爸爸想到了這樣乙個題目。如果有a b c三個1位的正整數,那麼按以下的方法構成2個三位數 第一種方法是a為百位,b為十...

東華oj 高階題第21題

21 回文質數 問題描述 因為151既是乙個質數又是乙個回文數 從左到右和從右到左是看一樣的 所以 151 號是回文質數。寫乙個程式來找出範圍 a,b 5 a b 100,000 間的所有回文質數 輸入說明 僅 1 行 二個整數 a 和 b 5 a b 100,000 輸出說明 輸出乙個回文質數的列...

東華oj 高階題第31題

31 最高頻率 問題描述 明明的爸爸是一位著名的數學家。他在明明很小的時候就發現明明有過人的數學天賦,因此有意培養他對數學的興趣。一次,明明的爸爸和明明玩起了乙個數字遊戲,這個遊戲的名字叫 最高頻率 在遊戲中,明明的爸爸要求明明在一串數字中,找出出現次數最多的那個數字,如果有多個數字出現的次數一樣,...