如何看待NOI奧賽編程題目只著重於演算法而不讓學生養成良好的編程習慣?
最近參加了學校的noi奧賽培訓,然而之前一直自學的我發現那的代碼是有多不嚴謹啊,只顧把那道題做出來,和數學題一樣
因為NOI是演算法競賽而不是編程習慣競賽......
為什麼noi培訓還涉及代碼相關的東西。。。
---- update ----
演算法競賽中一般對於「嚴謹」的解釋是這樣的:
對於任何一個滿足輸入格式和數據範圍限制的輸入,程序能在時間空間限制之內得到正確的輸出(或以一個與輸入數據無關的正確率給出正確的輸出,比如1-2^-60)。
簡而言之可以證明卡不掉就行。如何看待朱日和不安排海軍訓練?
為什麼一些冷門項目的奧運冠軍身體其實很不健康,局部損傷很大?這不是有違體育的意義了嗎?
刻意的競賽活動,本來就是對相關技能的一種異化。無論是OI還是工程,良好的編程習慣都能提高代碼寫對的可能性。
如果代碼習慣不好,比如步驟很多的題不把每個過程寫成一個函數,那麼錯的時候很難調,在OI中就有可能調不出來最後爆0(親身經歷)
當然側重點還是有些區別的,OI當然是以解決問題為重點,並且考場時間有限,因此代碼相對較短,有時一份OI代碼相當於工程代碼里的某一個函數。工程代碼往往是一個團隊用長時間寫的,代碼很長,不易維護,所以變數、函數命名等都有嚴格的規範等,否則別人就看不懂了……反過來,OI中拖著很長的變數名用起來倒不方便,並且變數名只要自己能理解就行了。可見不同的場合,代碼習慣是不一樣的。
因為NOI是奧賽。奧賽的目的是設計演算法解決問題,根據給定的輸入在規定的時間限制內輸出正確的結果。奧賽不是軟體工程,目的也不是培養學生良好的編程習慣。想要培養良好的編程習慣,應該多看優秀的工程代碼,自己去實踐,而不是通過奧賽來培養。
因為NOI並不是編程習慣競賽呀。
那麼有人問了:「奈么NOI似什麼競賽啊?」
肯定有人回答「當燃似蒜法競賽辣!」
NO!這一聽就不是金牌選手,竟然被表象迷惑了!
任何OIer都不會對脫殼感到陌生。很多時候看著很難很複雜的題目其實只是套了一層迷惑你的殼,去掉這層殼後題目往往會變得異常簡單。
NOI也是如此。它當然不是演算法比賽,我不妨直接大慈大悲的告訴你答案:它似敏銳度競賽!
為什麼呢?請盯著它看:
NOI
NOI
N!O!I!
是組成了英文單詞NO么?
不不,太膚淺了。
那麼難道是組成了序列[1,-6]?
誤入歧途!你覺得這個東西有什麼用呢?
那……
哎,給你點提示吧!NOI!IOI!有沒有什麼想法了呢?不要膚淺的說首字母不一樣,集中注意力~!集~中~注~~意~~力~~~!
我會給你一頁的留白讓你好好思考。
哎,你竟然也沒有解出么!可惜了呀。
那麼就由我來告訴你答案吧!
請觀IOI!看,他是既是一個垂直鏡像同構文字(垂直翻轉文字不變),又是一個水平鏡像同構文字!
再觀NOI!看!NOI水平翻轉文字大變,垂直翻轉文字幾乎不變!
所以真相只有一個——————
NOI是倒立大賽!
領悟不到這一點、不會倒立碼代碼的選手是永遠也拿不到金牌的,可嘆啊(逃
前者理科後者文科
你所說的不嚴謹,如果指的是邏輯不嚴謹,那就是寫錯了,你去構造數據打臉就好了。
如果指的是代碼風格比較黑,你要明白這種比賽是限時的,準確快速的把你的想法實現才是最重要的,你的代碼不是用來給別人看的。Universal Online Judge
upd:這樣搞的好像我在發uoj網址一樣……其實是uoj上的一個提交記錄……大家點進去就知道啦
本人沒有參加過oi,但是身邊有好多金銀銅。這個就和你參加高考一樣,寫的再工整,不對又能如何。編程習慣一個月可以改過來,你一個月能練出來所有題目都ac?
不嚴謹你就構造數據hack唄
參加程序設計競賽的時候,每行都要縮進對齊,看到和對象相關的就都寫成class,並且強迫自己實現構造函數、賦值函數、析構函數等等,變數名都寫的有意義…
結果代碼寫的太慢,被隊友@zjyjer 無情地嘲諷 非NOI因為它就是數學題啊(逃)跟你高中的考試是一個性質的,追求分數最大化才是王道啊。
打個比方?什麼叫良好的編程習慣?不define?大括弧不換行?不寫類?不打類函數?寫完一條語句不換行?同一個if里的語句縮進不一樣?還是怎麼?我感覺沒有這類問題啊
估計define一下良好的編程習慣就能讓程序猿打起來。。。。。。競賽么,目的是把題目做出來,如果智商夠高,記憶力夠好,當然是儘可能快的寫出來,以便有更多的時間去想下一題,或者寫暴力對拍。每個人有擅長的地方,想當年,就是靠著封裝各種class,才拿下數據結構題之類的,所以我很少有調不出來的程序,可是比賽我從來都做不完題目,所以金牌與我無關 T_T。總之,還是要找適合自己的方法,儘力而為之。。。。
良好的編程習慣也是一種熟能生巧的東西,代碼寫錯、寫亂得多了,自然就會想著改變習慣。這樣看來其實演算法競賽也並非「不讓學生養成良好的編程習慣」,因為編程習慣好對於競賽成績的作用肯定是積極的。
你什麼時候產生了我們學的不是數學競賽的錯覺
不嚴謹就自己構造一組測試點打臉啊...
本來就是數學題啊,你是不是有什麼理解上的偏差
推薦閱讀:
※微軟開源Windows驅動程序框架和MSBuild源代碼會有什麼影響?
※Linux下調用pthread庫創建的線程是屬於用戶級線程還是內核級線程?求大神指教?
※怎麼寫規範、風格良好的代碼?
※數學一般的人適合學習編程嗎?
※在PowerShell中用命令運行.py文件 有黑色框閃了了一下 然後PowerShell直接跳下一行新的命令輸入了 求解?