如何看待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直接跳下一行新的命令輸入了 求解?

TAG:編程 | C編程語言 | C | CC | NOI |