洛谷P1567統計天數 C 解法

2021-10-03 20:43:46 字數 2102 閱讀 2871

先上我的失敗**:

#include

#include

#include

#include

#include

using

namespace std;

intmain()

; cin >> n;

for(

int i =

0; i < n; i++

)int cnt =0;

int times =0;

int daynum =0;

/* cnt:加到哪一位了

times:遞增幾位了

num:遞增天數記錄

daynum:num陣列的位標

思路是利用逐個記錄遞增的天數再利用sort函式排列,之後求最大值。

*/int num[

100000]=

;while

(cnt

else

else

if(times ==0)

else

times =0;

daynum++

;break;}

}}sort

(num, num + daynum)

; cout << num[daynum -1]

;}

不足之處1.本題資料量大,10的6次方,在達到這個大數字的資料下,我定義的陣列空間是不足以儲存的,而在改正之後,程式出現異常,提示說棧空間不足…當然這也不能怪罪別人,主要還是由於我自己思路的侷限性,沒有考慮到可以使用實時更替的乙個變數儲存值來代替陣列的儲存、排序2.對題目的思路還不夠清楚,我這個思路必然不是最優解…(廢話不然怎麼會錯) 導致**太囉嗦了…

決定以後洛谷解題系列的文章都要挑乙個高效且思路清晰的標準答案作為對比…

3.還是沒有特意考慮資料剛好是邊界值的情況,不夠嚴謹。

好的地方:(我還是得誇自己)

1.在思考的時候,遇到想不清楚的地方知道在本子上好好列思路圖和各個變數的作用來整理自己的思路

2.吸取了前幾次程式設計的教訓,計數變數有及時清零。

3.上學期期末複習發現的sort函式活學活用了!

#include

#include

#include

#include

#include

using

namespace std;

intmain()

tem1=tem2;

//對於第三天來說,第三天的溫度是tem2,第二天的溫度是tem1

} cout<

//本**天數統計的起點是0,但題目是1,也可在初始賦值是將a=0改為a=1

return0;

}}

思路:大佬的思路大致是這樣的:

首先利用獲得的資料總數建立for迴圈,不斷獲得接下來輸入的數字,但是不把數字存在陣列裡,而是當下利用變數儲存完、使用完,出迴圈之後在利用原來的變數容器來儲存新的資料,從而達到了不開闢大陣列,占用記憶體少的目的。

接下來對於獲得的溫度,與前一天的對比,大於則a++,小於則表明遞增結束了,那麼就與儲存一直以來最大值的b進行比較。(同時這裡利用的三目運算子一次性完成了取ab最大值的操作)

最後根據題目的性質輸出b

收穫總結:

1.對於這種,大規模資料求xx最大值的題目,不要急著建立大陣列,可以考慮利用for迴圈,完成隨到隨處理。

2.求最大值可以建立兩個變數,乙個儲存當下的每個值,另乙個存目前為止的最大值,這樣也避免了建立陣列的麻煩和耗時

寫在最後

我失去了乙隻臂膀

就睜開了乙隻眼睛

——顧城《楊樹》

:)thanks for your readin

洛谷P1567 統計天數

統計天數 炎熱的夏日,kc非常的不爽。他寧可忍受北極的寒冷,也不願忍受廈門的夏天。最近,他開始研究天氣的變化。他希望用研究的結果 未來的天氣。經歷千辛萬苦,他收集了連續n 1 n 10 7 天的最高氣溫資料。現在,他想知道最高氣溫一直上公升的最長連續天數。輸入格式 1行 乙個整數n。1 n 10 7...

洛谷P1567 統計天數

統計天數 炎熱的夏日,kc非常的不爽。他寧可忍受北極的寒冷,也不願忍受廈門的夏天。最近,他開始研究天氣的變化。他希望用研究的結果 未來的天氣。經歷千辛萬苦,他收集了連續n 1 n 10 7 天的最高氣溫資料。現在,他想知道最高氣溫一直上公升的最長連續天數。輸入格式 1行 乙個整數n。1 n 10 7...

洛谷P1567 統計天數

炎熱的夏日,kc 非常的不爽。他寧可忍受北極的寒冷,也不願忍受廈門的夏天。最近,他開始研究天氣的變化。他希望用研究的結果 未來的天氣。經歷千辛萬苦,他收集了連續 n 1 n 106 的最高氣溫資料。現在,他想知道最高氣溫一直上公升的最長連續天數。第 1 行 乙個整數 n。1 n 106 第 2 行 ...