第一篇:編程大賽感想
(本人技術一般,所寫只為給新人介紹一下西工大acm如何入門,大牛請無視本貼)
ACM競賽作為大學階段計算機學生的最高榮譽在咱學校竟然不受重視,也沒人提起,讓那些高中轉戰NOIP,IOI的同學寒心不已。其實我們學校成績還是可以的,前年就獲得了合肥賽區的第二名,當然由與高手都在其它賽區,沒有參加決賽的資格,但也說明了只要我們努力就能有成果。但由于其獲獎難度極高,我們學校幾乎是破罐子破摔,根本就不管事。其實是學校的這種心態造成大量潛在人才由于不知道相關信息而大學四年庸庸碌碌迷失方向,所以我來說說吧。(如果想簡單地保研的話就去機器人吧,進了70%國家一等獎,直接保研資格哦)當然想成為高手,想提升自己的能力就參加ACM吧。首先說下參加ACM比賽好處,以及與其它課程的關系: 很多人都說ACM考察面太窄了只是算法罷了,像操作系統,編譯原理,網絡,嵌入式等等都沒考察。
其實當你成為ACM高手的時候會發現這些課的重點難點用的算法你都已經知道了,你再學這些東西就像看小人書一樣了,你會覺得如果讓你去做這些東西你也會這么設計甚至還能加以優化。比如內存分配管理其實就是排序算法的應用而已,PV操作就是設置標志的小技巧而已,編譯原理就是字符串處理而已,路由器的相關算法就是圖論里的東東而已。。因為算法是核心,其它那些只是算法在具體環境下的特定應用罷了。如果說那些東西是套路,那么算法就是內功,而ACM比賽就是內功的檢驗場,你通過了說明你的任督二脈已經打通,你已可縱橫天下了。此時你已成為世界各高校爭相搶奪的人才了。就算沒有進入決賽但內功強了干啥都順手。從本科生階段到博士生階段的的各種面試筆試機試全逃不出acm考察的圈圈。因為難所以價值極高!
對于找工作來說,百度騰訊網易google每年都有類似于ACM的競賽,初賽大概都在五月份到六月份進行。只要進入決賽去他們公司找工作都不用簡歷,直接走綠色通道的哦~你奪得名次后這些公司的崗位就任你挑了,不用簡歷不用面試,求你到他們公司去!
想想看吧:你不用向各大公司投簡歷,而是各大公司像你投他們公司的簡歷了,然后你看都不看把它們都丟到垃圾桶里去!(我時常就在幻想這樣的牛人待遇啊,現在已經大四了悔之晚矣,希望大一的同學努力啊)
再說高數,物理等科目。其實與算法真的沒什么關系。一旦模擬信號變成了離散信號就是算法的天下了,與之相關的數學是組合數學(研究生階段才開,我認為應該大一就開)。主要是為了我們今后的計算機應用,比如各種物理數據的采集處理,物理電路的設計仿真等等,這些都屬于計算機應用范疇,我們學校其實沒有計算機科學專業,有的只是計算機應用與技術專業。有志去1,3系的同學好好學高數,復變,信號與系統這些課吧。當然高數等是常識性知識,不能不知道,這么簡單的東西都學不好就不要搞acm了。接著講正題:
本人剛來時由于不知道如何進校隊而浪費大量時間,學校信息也較為閉塞,到了大三參加了一次也是草草收場,所以希望更多有志的同學早些知道些信息少走彎路。咱學校進校隊其實非常簡單,有兩條路:
第一條路:在學校舉行選拔的時候去參加選拔賽。這個要特別留心,很多陰險的人看了通知后就把通知扯掉的(當年親眼目睹。。),一定要多留心。
第二條路:把usaco前五章的題目做完你就直接去找王琪老師就可以進校隊了。王琪老師會上離散數學和算法分析課,大家留心下。王老師水平不咋樣但人還是很好的,會盡力幫你的哦。ACM競賽與其它競賽的區別就是學生一定比老師強,強很多!(不像咱學校的那些所謂的強項競賽,哼哼)
第二條路顯然是我們的最好選擇。因為一旦你做完了前五章題目什么選拔賽早已不在話下了。usaco是美國的程序設計訓練站,剛開始英語看不懂的話就去nocow看翻譯。acm的題目都是英文的,所以最好看英文的。(學計算機英語極為重要,這東西幾乎是美國一家弄出來的沒辦法)。這個站的特點是題目按學習進程一步步安排,從最簡單的講起,對各種算法分別介紹,題目循序漸進的出現。不像其它OnlineJudge一開始就讓你面對雜亂無章的一對題目。一開始你只能做幾道題,只有你做完了這幾題之后才能解鎖后續的題目。做這套題目還有一個好處就是做過這套題的人特別多,相關分析講解到處都是,相當于有一位經驗豐富的老師給你指引了。
當然做完這套題是很不容易的,用一年時間攻克它吧。如果光看書不做題是絕對不行的,要邊做題邊看書。你會感到強烈的對知識的渴求,而且在應用中你會牢牢記住書上的東西并透徹地了解他們。
首先是語言基礎,先把C語言弄熟來(高中用過PASCLE學C一樣很快的)。C語言書用譚浩強的就可以了,我們的目標只要會用這門語言即可,此階段會寫冒泡排序,斐波那契數列的遞歸法,八皇后,約瑟夫問題(數組版和鏈表版,有興趣看看數學公式版)即可。然后找一本簡單數據結構書看一下(一般都用嚴蔚敏寫的),先把前四章看下,代星星的以及樹和圖以后做題時一塊看。接著學習C++。C++的好處就是STL,一些數據結構如棧,隊列,優先隊列都可以直接調用,一些常用的算法(例如快排)也可直接調用。C++先用幾天看看譚浩強的寫的紅色的那本,把類,構造函數,析構函數,泛型編程,操作符重載等相關概念理解下,譚的書例子非常簡單利于理解,然后看下《ACM程序設計》這本書(藍皮的,北京大學出版社,超簡單的入門基礎書,強烈推薦新手看),基本上STL就會用了。然后備著本《C++ primer》就好了,遇到問題時查查。用一周把《ACM程序設計》上的水題推掉,這時語言功底已經打好了。接著準備一本《算法導論》和一本簡單的國人寫的算法設計與分析,按照usaco上的順序開始算法的學習吧。
其中你會遇到各方面的問題,主要有數論,數據結構,組合數學,計算幾何等方面,帶著問題去圖書館或上網查資料學習吧,效率很高的哦~ 順帶說下,我們學校是先學數據結構再學算法,我認為在學數據結構前先學下算法較好,因為是先有算法
做完五章就去校隊吧,會讓你做烏拉爾大學的OJ,這時再準備本劉汝佳的《算法藝術與信息學競賽》翻翻吧(此書極難,分析超短,只適合高手看)
第二篇:編程感想
編程感想
從C學到C++,就是從面向過程到對象,又從C++到JAVA,就是從靜態語言到動態語言。編程語言的學習無怪乎多寫代碼,多參考,多了解,那些所謂的牛人,又有多牛呢 ? 我想開始時也跟我們剛學時一樣,但人家堅持住了,所以被牛了!編程要養成好的習慣!
下面是我在一篇博文上看到的,很受用,與大家分享 態度篇
1.做實事 不要抱怨,發牢騷,指責他人,找出問題所在,想辦法解決。對問題和錯誤,要勇于承擔。
2.欲速則不達 用小聰明、權宜之計解決問題,求快而不顧代碼質量,會給項目留下要命的死角。
3.對事不對人 就事論事,明智、真誠、虛心地討論問題,提出創新方案。4.排除萬難,奮勇前進 勇氣往往是克服困難的唯一方法。學習篇
5.跟蹤變化 新技術層出不窮并不可怕。堅持學習新技術,讀書,讀技術雜志,參加技術活動,與人交流。要多理解新詞背后的所以然,把握技術大趨勢,將新技術用于產品開發要謹慎。
6.對團隊投資打造學習型團隊,不斷提高兄弟們的平均水平。7.懂得丟棄 老的套路和技術,該丟,就得丟。不要固步自封。
8.打破砂鍋問到底 不斷追問,真正搞懂問題的本質。為什么?應該成為你的口頭禪。9.把握開發節奏 控制好時間,養成好習慣,不要加班。開發流程篇
10.讓客戶做決定 讓用戶在現場,傾聽他們的聲音,對業務最重要的決策應該讓他們說了算。
11.讓設計指導而不是操縱開發 設計是前進的地圖,它指引的是方向,而不是目的本身。設計的詳略程度應該適當。
12.合理地使用技術 根據需要而不是其他因素選擇技術。對各種技術方案進行嚴格地追問,真誠面對各種問題。
13.讓應用隨時都可以發布 通過善用持續集成和版本管理,你應該隨時都能夠編譯、運行甚至部署應用。
14.提早集成,頻繁集成 集成有風險,要盡早盡量多地集成。15.提早實現自動化部署 16.使用演示獲得頻繁反饋 17.使用短迭代,增量發布
18.固定價格就意味著背叛承諾 估算應該基于實際的工作不斷變化。用戶篇 19.守護天使 自動化單元測試是你的守護天使。20.先用它再實現它 測試驅動開發其實是一種設計工具。21.不同環境,就有不同問題 要重視多平臺問題。22.自動驗收測試
23.度量真實的進度 在工作量估算上,不要自欺欺人。24.傾聽用戶的聲音 每一聲抱怨都隱藏著寶貴的真理。編程篇
25.代碼要清晰地表達意圖
代碼是給人讀的,不要耍小聰明。26.用代碼溝通 注釋的藝術。
27.動態地進行取舍 記住,沒有最佳解決方案。各種目標不可能面面俱到,關注對用戶重要的需求。
28.增量式編程 寫一點代碼就構建、測試、重構、休息。讓代碼干凈利落。
29.盡量簡單 寧簡勿繁。如果沒有充足的理由,就不要使用什么模式、原則和特別的技術。30.編寫內聚的代碼 類和組件應該足夠小,任務單一。31.告知,不要詢問 多用消息傳遞,少用函數調用。32.根據契約進行替換 委托往往優于繼承。調試篇
33.記錄問題解決日志)不要在同一地方摔倒兩次。錯誤是最寶貴的財富。34.警告就是錯誤 忽視編譯器的警告可能鑄成大錯。
35.對問題各個擊破
分而治之是計算機科學中最重要的思想之一。但是,要從設計和原型階段就考慮各部分應該能夠很好地分離。
36.報告所有的異常 37.提供有用的錯誤信息
稍微多花一點心思,出錯的時候,將給你帶來極大便利。團隊協作篇
38.定期安排會面時間 常開會,開短會。
39.架構師必須寫代碼
不寫代碼的架構師不是好架構師。好的設計都來自實際編程。編程可以帶來深入的理解。
40.實行代碼集體所有制 讓開發人員在系統不同區域中不同的模塊和任務之間輪崗。41.成為指導者 教學相長。分享能提高團隊的總體能力。
42.讓大家自己想辦法
指引方向,而不是直接提供解決方案。讓每個人都有機會在干中學習。
43.準備好后再共享代碼 不要提交無法編譯或者沒有通過單元測試的代碼!44.做代碼復查 復查對提高代碼質量、減少錯誤極為重要。45.及時通報進展與問題
主動通報,不要讓別人來問你。
第三篇:編程大賽通訊稿
計算機編程大賽通訊稿
-----編程我們因你而心動
11月5日,由行知匯元贊助舉辦的軟件編程大賽在下午二點如期舉行,此次比賽讓我們看到了我校學生在軟件學習積極性、創新意識和勇于實踐的科學精神,進一步培養我院學生的綜合素質和創新能力,挖掘出更多優秀軟件人才。
此次比賽為時兩天,前一天半為培訓,最后半天進行正式的比賽,11月4日早上七點,全體參賽人員和科協的工作人員在二號樓門口集合,坐車到達行知匯元在北郊的培訓基地,從八點半開始有專門的老師對參賽選手進行正式的培訓。此次比賽報名選手的參賽語種主要有C語言和java,培訓老師將選手分為了兩批,一批進行C語言的培訓,一批進行java語言的培訓。老師除了對選手進行基礎知識的講解,還加入了上機的實踐操作,培養了學生的編程思想和他們的動手實踐能力。
在11月5日的下午兩點,比賽正式進行,比賽時間為兩個小時,分為兩個教室進行比賽,每個教室都有科協的人員進行監考,維持比賽的秩序,另外還有兩位老師進行輪流監考,比賽過程中選手們都用心積極的答題,兩天的培訓,使他們學到了在大學中所不懂得知識,讓他們對編程有進一步的了解。
四點比賽結束后,在歡送儀式后,全體成員回到了學校繼續奮斗,這次培訓及比賽讓我們懂得了雖然這兩天我們或許學不到什么,但是我們明白了編程最重要的是要有思想,培訓完離開那不是終點,而是 我們新的起點。
計算機科學學院科技協會
2010年12月5日
第四篇:游戲編程感想
游戲編程感想
班 53080907 周杰
首先,通過游戲編程課程的學習,我了解了怎么用我們所學過的知識進行游戲編程,不過對于第一開始應該用什么語言,你有許多種選擇,包括Basic、Pascal、C、C++、Java等等,而且在網上關于游戲制作新手應該選擇哪門語言的討論也很多。推薦選擇C和C++做為開始寫游戲的語言。一些人可能會說這兩種語言對于沒有編程經驗的新手來說有點難度,我不同意這種說法,因為我就是剛開始的也是選擇這兩種語言。另外C/C++在今天是兩種應用范圍最廣的語言,因此你才會更有可能得到更多的編程和學習資源以及其他人的幫助。
其次,如果要進行游戲編程,我們要對我們在大學期間學過的相關知識有個大概的了解,游戲編程設計到經濟學,統籌學,物理學,機器人學,生物學,心理學,人工智能,計算機圖形學,多媒體技術,虛擬現實等等。而且它也是一個團隊的合作才能完成的工作,它所涉及的工作有策劃、程序、美術、音樂等。只有每個方面的工作相互配合達到完美,所設計出來的游戲才是一款經典的游戲作品。
第三,作為游戲編程,它所設計的不單單是一款游戲,如果把它想成僅僅工人們娛樂消遣的工具,那就把游戲定義的有所狹隘。游戲只是人們日常生活中所能接觸到的一部分應用,它更可以應用虛擬現實的技術把這個產品應用到人們生活的方方面面,比如軍事模擬訓練,仿真模擬等等。
最后,不要僅僅是積累知識,用它。除非你用它們,否則你不能真正的知道和理解它們。用你所學的東西制作一個小的Demo。認真的去做書里面每個章節后面留的練習。
盡量玩更多的游戲。這樣做可以給你許多靈感并能幫助你把游戲做的更好一些。這也可以給你枯燥的編程工作減輕一些痛苦。
幫助別人。在教別人或者給別人講解的過程中你將會更加的了解自己,學到很多東西。有始有終。不要陷入“我知道我能完成這個游戲,但是我有更好的方法,因此我要繼續想想我的那個方法。”如果你能完完整整的寫完一個你從一開始要做的游戲,你將會學到非常非常多的東西,而且你也有東西可以證明你不是一個把什么東西都停留在嘴巴上的人。在你成為一個有經驗的游戲程序員之前,請把你要做的游戲更簡單更容易一些,不要貿然的去嘗試寫一些比較大或者很復雜的游戲。
第五篇:華為編程大賽試題
客觀題部分,共30分,建議這部分答題用40分鐘。
一、單選題(每題1分,共10題)
1、以下敘述中不正確的是______。?
A)在不同的函數中可以使用相同名字的變量 B)函數中的形式參數是局部變量
C)在一個函數內定義的變量只在本函數范圍內有效
D).在一個函數內的復合語句中定義的變量在本函數范圍內有效(復合語句指函數中的成對括號構成的代碼)?
2、下列全局變量定義中,正確的是:______。
A)char abc [] [];B)char abc [] [NUM];C)char abc [NUM] [];D)char abc [0];
3、關于斷言,錯誤的說法是:______。
A)我們可以使用斷言來發現軟件問題。
B)在正式發布的軟件版本中也要保留斷言,以便于定位問題。
C)斷言不能用于對外部輸入數據的判斷,只能用于程序內部邏輯的判斷。D)不能用斷言來代替錯誤處理。
4、關于函數參數,正確的說法是______。
A)防止將函數的參數作為工作變量。
B)應該為函數功能的擴展預留盡可能多的參數接口。
C)通常函數內部會對函數參數進行合法性檢查,為了提高效率,函數調用者不需要再次進行參數合法性檢查。D)不要輸入指針變量。
5、關于函數實現,下面不正確的說法是______。
A)為簡單功能編寫函數。
B)函數的功能應該是可以預測的,也就是只要輸入數據相同就應產生同樣的輸出。C)防止把沒有關聯的語句放到一個函數中。
D)為了增強函數的可用性,應盡量設計多用途面面俱到的函數。
6、關于函數,不正確的說法是______。
A)如果多段代碼重復做同一件事情,那么在函數的劃分上可能存在問題。
B)功能不明確較小的函數,特別是僅有一個上級函數調用它時,應考慮把它合并到上級函數中,而不必單獨存在。
C)對所調用函數的錯誤返回碼可以根據需要決定是否處理。D)對于提供了返回值的函數,在引用時最好使用其返回值。
7、編程中下面說法錯誤的是______。
A)編程時,要防止差1錯誤。如:把“<=”誤寫成“<”或“>=”誤寫成“>”。B)系統運行之初,要初始化有關變量及運行環境,防止未經初始化的變量被引用,但可以使用操作系統的默認初始化值。
C)有可能的話,if語句盡量加上else分支,對沒有else分支的語句要小心對待;switch語句必須有default分支。
D)要時刻注意易混淆的操作符,如C/C++中的“=”與“==”、“|”與“||”、“&”與“&&”等。當編完程序后,應從頭至尾檢查一遍這些操作符,以防止拼寫錯誤。
8、如果有下列定義:?
char acX[ ]= “abcdefg”;??
char acY[ ]= {'a','b','c','d','e','f','g'};?? 中?法說個四面下正確的是:______。A)數組acX和數組acY等價 ?B)數組acX和數組acY的長度相同 C)數組acX的長度大于數組acY的長度 ?D)數組acX的長度小于數組Y的長度
9、假設執行語句 S 的時間為 O(1),則執行下列程序短的時間為______。(乘法表的計算可以采用這種模式)
for(i=1;i<=n;i++)? {
for(j=i;j<=n;j++){
S;
}
}
A)O(n)B)O(n2)C)O(n*i)D)O(n+1)
?
10、設有 98 個已排序列元素,采用二分法查找時,最大比較次數是______。
A)?49 B)?15 C)?20 D)?7 ?
二、多選題(每題2分,共10題,少選可以得1分)
11、關于全局變量的注釋,哪些描述是正確的?______。
A)全局變量要有較詳細的注釋 B)注釋包括功能、取值范圍等
C)如果全局變量的命名是充分自注釋的,則可以不加注釋 D)注釋可以包括使用方法
12、關于變量,正確的說法是:______。
A)在對變量聲明的同時,應對其含義、作用及取值范圍進行注釋說明,同時若有必要還應說明與其它變量的關系;
B)對公共變量賦值時,若有必要應進行合法性檢查,以提高代碼的可靠性、穩定性; C)構造僅有一個函數可以修改,而其余函數只讀的全局變量,可防止函數的不可重入性;
D)不同的編譯器對變量的默認初始化是不同的。為了避免不同編譯器引起的差別,對變量,尤其是指針變量,強烈推薦在使用前將其初始化。
13、下面關于資源分配的說法正確的是:______。
A)只引用屬于自己的存貯空間。B)防止引用已經釋放的內存空間。
C)過程/函數中分配的內存,在過程/函數退出之前要釋放。
D)過程/函數中申請的(為打開文件而使用的)文件句柄,在過程/函數退出之前要關閉。
14、如果不使用常量,直接在程序中填寫數字或字符串,將會有什么麻煩?______。
A)程序的可讀性(可理解性)變差。程序員自己會忘記那些數字或字符串是什么意思,用戶則更加不知它們從何處來、表示什么。
B)如果要修改數字或字符串,則會在很多地方改動,既麻煩又容易出錯。C)在程序的很多地方輸入同樣的數字或字符串,難保不發生書寫錯誤。D)程序無法編譯。
15、關于宏define SQUARE(a)((a)*(a))正確的用法是______。
A)b = SQUARE(a++);
B)b = SQUARE(a);a++;C)b = SQUARE(a--);a--;D)b = SQUARE(a);a--;
16、以下對結構(struct)和聯合(union)的說法正確的有:______。
A)結構和聯合都是由多個不同的數據類型成員組成;? B)在任何同一時刻, 聯合中只存放了一個被選中的成員;? C)在任何同一時刻,都可以訪問結構和聯合的所有成員;?
? D)對于結構和聯合的不同成員賦值是互不影響的。?
17、關于編譯預處理程序的功能包括但不限于:?______。
A)宏定義;? B)條件編譯;?
C)在源代碼中插入預定義的環境變量;? D)打開或關閉某個編譯選項。?
18、下列extern “C” 的用法,哪些是正確的:______。A)在C++中引用C語言中的函數和變量;? B)引用其它文件定義的函數和變量;?
C)C++實現的DLL,導出動態連接符號給C語言代碼使用;(直接使用extern即可)? D)引用其它C程序定義的函數和變量。
19、下面哪些是sprintf函數正常使用出現情況:______。?
A)輸出緩沖區太短,出現溢出; B)參數多于格式符的數目;
C)多線程同時用不同緩沖區調用sprintf; D)%s格式符對應了空指針。
20、關于關于數組和指針描述正確的是:______。?
A)數組可以在靜態存儲去或者棧上創建;? B)指針可以隨意指向任意類型的內存單元;?
C)用sizeof運算符可以計算出數組的容量(字節數),而不能用sizeof()計算出指針p所指向的內存容量;?
D)當指針p指向常量字符串時,也可以向字符串數組那樣修改其中的某個字符。?
三、編程題(共2題,第1題40分,第2題30分。請上機編寫程序,按題目要求提交文件。本試題采用自動測試用例進行評分,測試用例不對考生公開?,凡不滿足提交要求導致不能編譯或用例不通過,不予評分;)。1.電路板布線問題 ? 問題描述:
o 對于一個有N個引腳的電路板,我們需要在這些引腳之間連線。現在對于給定的連接引腳的方法,需要程序判斷,這組方法是否會產生線段之間的交叉。
輸入:
o N 電路板的引腳數量;(1,2),(3,4),......連線的方式。(1,2)表示1、2號引腳存在連線。
o
要求實現函數: ?
?
unsigned int Lay_line(int n, unsigned int *p)
不產生交叉返回0 ; 產生交叉返回 1
輸入參數:n:電路板引腳個數;
p:指向一個數組(長度固定為64),表示電路板引腳連接方式; 輸入:1 4 2 3 0(0表示布線結束)
表示該連接方案有兩個連接
1號 4號管腳連接 2號3號管角連接
? 示例
o N = 4;(a1,a4),(a2,a3)程序輸出“0”
N = 4;(a3,a1),(a4,a2)程序輸出“1”
N = 4;(a2,a1),(a2,a3)程序輸出“0”
注:沒有布線(輸入數據為0)意味著沒有連線 可認為沒有交叉
2.括號匹配判斷(用棧實現)
? 問題描述:
o 檢查字符串表達式中的括號是否匹配;
o 左括號數目同有括號數目不相等即為不匹配;
o 去除多余的左括號或者右括號,優先保留先出現的括號;
o 匹配后去除無效的括號:如:((表達式))應為(表達式);
o 只考慮小括號,不考慮先出現右括號的情況;
要求實現函數:(字符串最長長度為60;表達式正確性不需要考慮)
void Bracket(char* src, char* dst);如果匹配則通過dst輸出原串;
如果不匹配則根據要求去處多于括號后通過dst輸出匹配后的串 ?
? 示例
輸入:12+(345*25-34)輸出:12+(345*25-34)輸入:12+(345*(25-34)輸出: 12+(345*25-34)輸入:(12+345)*25)-34 輸出:(12+345)*25-34 輸入:(543+(256-43)*203))+24
輸出:(543+(256-43)*203)+24 輸入:((1+2)*((34-2))+((2*8-1)
輸出:((1+2)*(34-2)+2*8-1)