PTA题目集4~6总结Blog
1. 4~6题目集的大体总结
第四次题目集的整体难度还是比较低的,第一题难度最大,放在后面说。第2,3题则涉及对重复数字的处理问题,本意是想要用双重循环解决问题结果运行超时,这也是我第一次学习hash表来解决问题,第4题则需相对更复杂一点,不仅需要对单词进行切割还要按指定规则进行排序,其中的方法思路很多都是刚刚接触学习的,这对于自学能力有较高的要求。第5题则是考察面向对象的封装性,因为之前的实验已经用过,这题倒相对简单。第6题是简单的算法,第7题则是对日期的方法进行应用,也比较简单。
第五次题目集总体上是对于正则表达式的练习和使用第1,3,4题都是对于正则表达式中特定符号的意思以及正确应用来解决实际问题,让我对于最初的正则表达式有了初步的了解。第6,6题则是对于之前写的日期类问题进行更加“面向对象”的改进,第5题则是让类与类之间变为依赖关系,然后考验类与类的调用,对于第一次这么多类的调用,开始时感觉比较为难,但在写完其中的方法后感觉,只是用固定的方法去进行调用,并没有太大的难度,写着写着就能明白。最后知识改变了类之间的关系。
第六次题目集只有一道题,但无论是问题的复杂程度还是要求的繁杂度都是前所未有的,对于各种各样的情况都有着详细明确的要求,这更加切合与实际的生活,这也让我第一次感觉到了实际问题,要想处理好的代码量是多么的复杂,说来惭愧,因为自身的各方面原因,能力不够,然后也没有投入过多的时间,导致最后在截止时间之前没有把这个代码完成。但这个题目集确实让我看到以后从事软件行业需要面临怎样的思维能力和代码能力。
2.设计与分析
7-5 设计如下几个类:DateUtil、Year、Month、Day,其中年、月、日的取值范围依然为:year∈[1900,2050] ,month∈[1,12] ,day∈[1,31] , 设计类图如下:
应用程序共测试三个功能:
- 求下n天
- 求前n天
- 求两个日期相差的天数
这道题是将之前的日期类的题目的一个类的关系改变,相比较之前直接写类和日期的题目,之前是每一个类中的方法,然后在主函数中想要用的话,直接引用类。这次是类与类之间存在关系,想要引用这个类的,在从它所属的那个类中层层调用。这对于我们理解面向对象封装性是一个很好的题目。相比较于之前直接调用类中的方法。这种通过类与类之间层层调用。让我开始感觉是调用更加复杂了,从一个类中调用另一个类,再从另一个类中调用前一个类,就以此层层递进。虽然现暂时我没有感觉到这种的便利,但是我可以很明显的感觉到自己对于累的理解加深了,对于调用也更加熟练了。
因为这个题中类与类之间的关系是。这个类和他前面那个类有关,然后导致每一个类都是这样一层一层往前进的,导致我这个写这个题最大的问题就是如何去调用这个类来表达前面那个类,之后,在系统的学习之后,我发现只要通过this.这个类里面的方法。再加上前面类的名字和类的方法就可以进行调用。大体上的思路就已经明确了。
7-6
设计如下几个类:DateUtil、Year、Month、Day,其中年、月、日的取值范围依然为:year∈[1820,2020] ,month∈[1,12] ,day∈[1,31] , 设计类图如下
应用程序共测试三个功能:
- 求下n天
- 求前n天
- 求两个日期相差的天数
这道题和上一道题一样,不过上一道题是类与类之间层层利用,这道题是从一个主要的DateUtil类来调用其他的类,然后最后在主函数中只用调用dateutel中的方法,和上一个题大约都是考察类与类之间的用关系,只不过类与类之间的关系不太一样,所以从而导致调用也不太一样,但是殊途同归,都是面向对象程序设计中,类与类之间的关系。
有了上一道题对类方法的描述,这个题中对于类的调用也不像上一个类中那么复杂那么长。在上一个题的锻炼下,写这个题就比较简单了。
题目集4 的7-1和题目集5 的7-1则都是对于菜单类这一实际问题的解决。很遗憾的是,这两道题我都没有完成代码的编写。首先这肯定有我自己的问题,在在看到题目很多,要求很多,题目又很长,耐着性子把题目读一遍,又感觉千差万绪,不知如何下手,在编写代码的时候,想着每个要求的实现,感觉越写越乱,越写越乱,当代码达到。三四百行的时候就已经乱了分寸,完全不知道如何编了。当类一多,方法一多,然后调用就会变得十分的困难,也为思路不够清晰而又想完成更复杂的要求,就会导致改。代码越写越多,越写越乱,最后根本无法下手。第四次作业的7-1还是简化过的菜单,当时因为自己的懒惰问题没有耐下性子,放出时间去解决问题。结果等到第六次作业的7-1这个问题就变得更加更加的难以解决,就导致自己更加的没有信心。才开始后悔之前。第四次如果将这个问题写好。那么第六次的时候就可以在第四次的基础上进行更新,进行升级,就不会再像现在一样根本第六次。更加复杂,但自己却没有任何的代码可以改进,只能从头开始写,导致越写越多,越写越复杂,最终放弃这个代码。因此,下次的题目不能够放轻言放弃,只能够尽量的去写,因为之后的题目还会逐渐升级要求。和复杂程度都会更加的多,如果这次不写,下次就更加无法下手了。
3.踩坑心得
对于找指定数据并剔除的问题。我首先想到的便是双重循环来进行解决问题,但在初次的尝试之后便发现。因为双重循环会导致运行的时间和内存都超过要求限制。这点是我最初没有想到的。刚开始写题,只是追求。正确,但是没有考虑它的效率性。于是在这题无法解决之后,我便开始学习和应用更加高效的方法,比如说哈希。 然后在我学习并应用了哈希之后。这道题的内存和运行时间都达到了标准,于是就写出了这道题。
然后后面的题我又如法炮制的应用哈希来进行解决。但又出现了一些问题
这道题的内存和运行时间在应用哈希之后都没有问题,但还是出现了在n极大的时候出现了错误,这里的缘故我还没搞懂,可能是算法出现了问题,也可能是哈希表中的某些问题我没搞明白。
然后就是日期类方法的应用
之前写的日期类一直都是自己写算法,然后忽然可以用日期类的方法,感觉很简单。在了解了方法的作用和简单的应用之后,便开始了代编码,但写完之后,一运行就出现了非零返回,这样的错误。自己在编译器中运行输入,结果全是正确的,但是显示错误为非零返回。
之后上网查询了非零返回的几种常见原因。才发现,可能是因为数据没有遍历到末尾,就已经有结果并返回跳出循环了,所以没有检测到列表越界,这在编译器中虽然是允许的,但是PTA系统会认为异常。程序没有正常结束。这就导致我不知道如何去更改已有的程序,于是我将原本写的把日期遍历的那个,通过更多的日期方法来进行使用,而不是单纯的去遍历。又引入了。Is after is before等方法。最终解决了这个问题。
4.改进建议
第五次作业中日期类。的类关系改变,从而引起的代码的改变。这里类与类之间的调用,虽然我已经完成了,但是由于我本身代码的瑕疵。导致我的代码中出现了包括非零返回和内存超限之类的,并非运算结果出错的问题。这表明了我的代码。虽然结果正确,但是在大量数据的运行之下,或者数据比较大的情况下会出现。长时间的运行,而使内存超限。说明我写的算法虽然可以解决问题,但是不够简便,运算量也会比较大,占用内存较多。不够高效。因此,改变我的日期内的部分算法是非常值得注意的。
5.总结
这三次pta的作业。总体来说,除了菜单类的,其他的难度都不大。第一次是对于哈希表的应用和对于字符,数字等重复数据的删改排序之类的考验。第二次则是对于正则表达式的简单学习与应用,顺便对于日期中类与类之间的关系以及不同关系,应该如何调用的方法的应用。而第三次则是实际问题中,菜单的应用,而菜单这一部分,由于其要求复杂,从而代码量比较大,在写代码时,由于类与类之间彼此的调用和不同的方法应用,导致我代码再写到三四百行的时候就已经感觉到非常麻烦,然后对于有些类已经,搞混了。自己对于。题目的练习还是比较少,在很多类,很多方法写在一起的时候,大脑就混乱了,导致无法捋清。思路没有从众多的代码中明确自己要干什么,从而编写出一段合理完全代码。
另外,听说其他老师班里写菜单就和我们班的日期一样,是一点一点往上加的。然后我们忽然开始就直接写这个升级了好几次的菜单可能就会有些吃力,毕竟其他班之前写过这个菜单的前身。可以在之前写的基础上进行增加和删改,而我们之前做的是日期类。现在忽然写这个,就会感觉到无从下手,这点我希望老师可以考虑一下,当然我们也应该具有从头写一个东西的能力,我也会努力的去写下一次作业,然后,尽自己的努力去实现每一个实际问题。