现在的位置: 首页 > 综合 > 正文

华为编程决赛后的感想

2018年04月04日 ⁄ 综合 ⁄ 共 1484字 ⁄ 字号 评论关闭

     在得知比赛时间是8个小时后,感觉难度挺大的,这也许是我的又一次尝试,又一次挑战吧。比赛前,自己的心态很好,能写多少就写多少,尽全力吧,只要之后没有多少遗憾就好。

     看了试题后,感觉真的挺有难度,这次的题目跟俄罗斯方块有点关系,就是在一个21*21的矩阵中,任意给定一个障碍物的位置,然后用俄罗斯方块中的图形去填充矩阵,填充的空间越多越好。我开始没有思路,不知从何入手,2个小时过后,才有了一点眉目。

       我先考虑一般情况,假设障碍物在中间,然后去填充它的周围,使之形成一个4*4的矩阵,然后在以它为中心,将它的上下左右用4*1或1*4的矩形图形全部填满,这样的话,在21*21的矩阵中,就将剩余没有填充的分成4个部分(左上角,右上角,左下角,右下角)。以上就是第一步。第二步就是再填充剩余的4个部分:我一右下角的一部分为例,先得到剩余空间的大小,然后判断得到一个合适的矩阵,我当时想的是矩阵大一点较好,以4*4的矩阵最好,这样我就可以用4个1*4的矩阵填充它,没有的话,再判断能不能形成4*3,4*2,4*1,3*4,3*3等这些矩阵,得到后,再用相应的矩阵图形填充,填充后,剩下的未填充的部分就再分成三个部分,横着的是一部分,竖着的是一部分,剩余的(对角线)是一部分,这三部分都是矩阵,我再分别在这三个部分再次调用这个方法就行递归,感觉就可以了。

      按照这个思路,我就开始写程序,写了一段时间后,感觉工作量有点大,但时间已经过去很多了,我感觉也没有时间和心思来考虑有没有改进的方法,还是就按照这个思路写吧,到最后,调试程序还是有问题,当时已经没有时间了,没有办法,就把交了吧。走在回寝室的路上,虽然没有做完,但感觉没有什么遗憾的,因为自己已经尽力了,有了思路,能写的都写了,只是时间不够没有写完而已。

     回到寝室后,细想了一下,感觉有更好的办法。在第二步的时候,我为什么不选取一个2*2的矩阵呢,这样的话,我就可以以它为基础,先填充第一排,再依次填第二排-----------------,填完过后,我再判断剩余为填充的部分,用合适的图形去填充,这样就简单多了。

     想到这里后,顿时感觉有点失落。为什么会出现这样的情况呢,我总结了一下。

     1.在选取4*4矩阵时,没有仔细分析选取它的原因,没有考虑有没有更好的,可能是定式思维,因为在第一步中,我选的是4*4的矩阵,在那种情况下,选它最好。所以在选方案时,每一步都还是要仔细分析一下,最好不要凭感觉。

     2.可能是自己不太自信,在想好方案算法后,没有再去质疑过算法的优劣,因为我当时不想将好不容易想到的算法放弃,也不想在当时的情形下,给自己太多压力,我害怕想不出其它的算法。这也许是一种逃避吧,但这样还是不行,在一个不好的思路上花很多精力,很有可能是白做了。

     3.也许是我想多了,受到了题目的误导,题目说的是可以随意选取俄罗斯方块里面的图形,如果按照之后的算法,那么我选用的图形就比较少,可以只用得上2*2,4*1和1*4的。而用之前的算法,因为有3*3,3*2等图形的选择,那么选用的图形较多,所以当时感觉这样的算法还行,应该比较满足题目要求,但这个的工作量跟上一个算法相比,工作量要大很多。题目的要求是尽量填充矩阵,不管选用那几个图形,那我为什么不选2*2的呢,这样比较容易实现。所以选方案时,还是要以简单易用实现的方法为中心,只要满足题目要求就行了。

       过去后的就让它过去吧,虽然感觉有点遗憾,也许这一次的遗憾是为了下一次不再有遗憾,就只能这样安慰自己吧。

抱歉!评论已关闭.