第一篇:编程大赛感想
(本人技术一般,所写只为给新人介绍一下西工大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)