一.前言:
在这几周,我们进行了3次pta的题目训练。每次的题目集的最后一个答题程序不断迭代,使题目集的难度不断增大,压力很大。不过与此同时,这也使我们学到了很多。
以下是我的初步总结:
1.知识点
在我看来,答题程序实现的关键有两点。
第一点是正确的使用正则表达式等技术提取输入信息,从答题程序-1仅有的N,A,到之后答题程序-2的S,T,D等信息,怎么提取出我想要的信息?
并且因为有许多的变化,比如Q与A后面不一定是算式,可能是中文问题等。要求我们对正则表达式不断的变更,以适应题目要求。而有时正则表达式并不能完全提取出所要的信息,还要结合spilt,trim等函数进行修正,必要时可以用上StingBuild类等。
第二点则是类与对象的的安排与使用,提取的信息怎么储存?储存在哪里,怎么理清它们之前的关系?这需要我们架构好整体框架再动手,不然在不断迭代下,可能之前的储存逻辑就行不通了,直接整体崩塌,只能推倒重来。所以在我看来,理清数据间的逻辑,合理的储存与使用信息,是实现答题程序的关键所在。没有思想的胡乱写下去,必然会出现重大的错误,使进程无法继续下去(我就是这样的人)。
除此之外,字符串数组,ArraList类,hashmap的使用,也能让我们在编码的过程中更加轻松。
2.题量与难度
第一次作业相对简单,逻辑清晰,难度不大,很快就可以完成。导致我误判了答题程序的难度。
答题程序-2添加的T,S和新增的各种逻辑,使题目难度直线上升,而我拖到最后一天,无法完成。在补练中我依然拿不了满分,问题出在S,T数据储存与逻辑判断输出上(这里不详讲),我因为结构与逻辑问题无法正确的匹配或者判断S与T后面的信息。
答题程序-3难度进一步提升,有了前车之鉴,我从题目发布开始编码,但是答题程序-3的逻辑复杂程度进一步提升,写到后面我已经不知道自己写的是什么了,修前补后,狼狈不堪,到最后也只拿下一半的测试点。
二.设计与分析
1.首先是正则表达式的设计,为了方便我将三次答题程序的正则表达式的设计一并给出
答题程序-1
String regex = "#N:(\s\d+\s)#Q:(.)#A:(.)";
String regex = "#A:(\S+)";
答题程序-2
String regex = "#N:(\s\d+\s)#Q:(.)#A:(.)";
String regex ="#T:(\d+)\s(\d+-\d+)\s(\d+-\d+)(\s(\d+-\d+))";
String regex = "#(S|A)