前言
写了三周的模拟题,对原本就厌恶的模拟更加深恶痛绝。但是不得不说模拟题是对一门语言入门掌握其语法成效最快的一类题,轻松地从C入门到了Java。一直坚信各门语言都是想通的,一力破万法。
作业过程总结
第一周的题大致的让我掌握了Java的基础语法,逻辑上依旧停留在面向过程的暴力解题。第二周的题用上了所谓的方法--但是我还是喜欢叫他函数,不懂为什么要增加这么一个概念。第三周开始运用类等一系列面向对象的思想写完了一套大模拟的题。三周的时间慢慢地了解了何谓面向对象,何谓面向过程。以前写题从来没有刻意去写不必要的函数,以追求更高的效率。但是未来的工作不会像现在这样不停的追求效率去刷题,更大规模的编程再用这样的思想是走不远的,增加一定的冗余以提高算法的复用性。写学校的作业最大的感受就是输出格式的繁琐,其实大可以简单的输出结果去掉不必要的格式,这是可能是长期训练养成的“恶习”吧,训练的目的是为了提高算法的水平,而不应该把时间浪费在不必要的格式上。第一周写题就因为一个符号浪费了半个小时,这无疑令人火大,在之后的过程中也有碰到,像什么结尾的“.”时有时无,令人头大--还好第三周不用写格式。
每次写题时间都在一个小时左右吧,几道模拟题写这么久,说出去还有点丢人。之所以用时如此之久主要还是因为对Java的不熟练,在这之前应该就用这个写过两道题(只写过核心算法,定义输出之类的还是队友帮忙写完的。随着渐渐熟练希望下次用时能尽量减短。至于严谨性。。。 。。。
OO设计心得
面向过程主要在乎的是完成程序最终的结果。面向对象就是将最终结果拆成若干个部分,完善各个部分的内容,实现的部分还具有复用性的特征。两者只是在目的上有所区别,其最重要的依旧是个人的编程水平,掌握再多的思想没有写的能力也毫无作用。实践出真知,多看多写多错多练,水平等一系列东西自然而然就会提升。
测试的理解与实践
模拟题被我深恶痛绝的主要原因在于他的十分费时,当然这跟年纪变大没有年轻时的激情也有关,遥想还是一年前的萌新的时候啥都不会只会写模拟暴力,那时候还是很快乐的。模拟题提升入门的编程能力是有很大帮助的,对于很多数据结构的认识,数据范围的了解等等是非常有益的,特别是对于语法的认识用的多了自然也就懂了。模拟题的特点就在于不需要太多的高级算法和思维,只用一股脑的暴力完成各个步骤就能解决,可以大大提升萌新刷题的信心。
设置测试样例之前最重要的是给出数据范围,一道题目没有明确指出各个给定的参量的范围是有瑕疵的,至于在测试点带上明确说明,这无疑增加了大家骗分过样例的狼子野心,如果是给训练出题这是绝对不可能出现的。但要给大家写作业的话。。。还有就是如果给定的是int型的数据在没有特别的必要的情况下是不需要超出int的数据范围的,没有意义除了骗一发错误提交。出浮点数的建议输出结果加上特判,因为不同的算法可能会出现一点点的精度误差
fabs[(标程-输出)/标程]<=1e-6等操作是竞赛上常用的浮点数判断方式。
课程收获
学会了基础的Java语法,最关键学会了高精度,比赛时队友再也没有抢走我键盘的可能了。
建议
编程是一个开放性的创造,不应该在写题时加上特定的要求,用什么方法各有各的招,我们要中国创造。。。