预备役3(2021-11-25)

今天没干什么事情,只把启航的字符串题目写了。我就对这些题目进行一个总结与归纳。

首先是对于字符串的增删与大小写互换。在前面的博客中也有提到过,首先是增,对于一个字符串来说,要增加有两种方式,一种就是链表,另一种是就是用两个数组实现。这里因为答主能力不够,只能用第二种方式,但是第一种方式无疑更加简洁,只需要把头尾地址改一下就行。接下来下面咱们说细一下怎么样用两个数组实现增添。首先先输入一个原数组,也就是待插入数组。接着用一个新数组从0开始遍历,根据题意判断插入条件和方式,最后输出新数组。下面是代码实现:

 结果:

其次就是删减,对于字符串的删减,咱们可以先定义一个新数组,接着把想删减的字符作为判断条件,然后遍历数组,当数组的值与其相等时,结束本次循环,若不想等,则用新数组存储当前的值。例如,我想从abcdefghijk这一串字符中删除aei这三个字符,那么我只需要定义一个数组str【】存储原字符串,再用一个新数组arr【】保存剩下的字符串。我们可以构建一个循环,当str【i】的值与’a‘或’e‘或’i‘相等时,我们直接结束本次循环,即i+1。否则,则用arr[]数组去存储它。下面是代码实现:

 

还有就是字符串大小互换,这个比较简单,即大写字母+32(ASCII码的值)就等于小写字母的值。这里就不一一赘述。

接着就是时间回文,这个当时让我头痛了很久,后面才知道自己的思维被局限了,看到这是字符数组的专题就一定要用字符串做,实则不然。下面我将对于这道题给出一种解法。首先先看问题:

 当时我看到题,首先就认为定义一个字符数组输入xx:xx,然后在慢慢比较找特例。但后来在于别人交流中,发现可以直接使用两个整型变量解决。我们先定义两个变量,hour,min代表时和分,想到这一步后面就简单了,要判断时间的回文且不能逆时针寻找,我们只需要把min每次加一在判断是否满足回文就行,如果满足,我们就跳出循环,并且输出它,下面是代码实现:

最后一个,也就是这些题目中我觉得对于我来说难度较大的,就是蛇形矩阵了。这个蛇形矩阵不像我之前做过的一样,话不多说,直接上题目。

 可能有大佬一眼就看出来这题的规律,但对我来说还是思考了挺久。其实所有的矩阵都可以分为两个问题,一个就是外层循环,另一个就是多个内循环,所以我们只需要判断外循环的规律,通过循环,就可以把使其从外往内进行赋值。

首先根据题目要求,蛇刚开始是从最右边的第一行往下走,这里我们设数组从0开始赋值。所以x=0;y=n-1;那么当它最多可以走到哪就要换方向了呢?这是我们需要考虑的,是不是当蛇走到最下面也就是x=n-1的时候停止往下,转而掉头往左走。用代码实现就是这里用++x来表示每次往下走,用a【i+1】【j】==0来判断是否下一步的位置是不是已经被赋值了,若是被赋值,则不往下一步走。现在我们已经走到了第n-1列第n-1行,所以我们现在要往第0列第n-1行走,那么我们只需要每次给--y就能实现。。接下来我们已经走到了左下角,也就是第n-1行第0列,所以我们现在得往上走,这里有个值得注意的地方,因为开始的时候我们已经给a【0】【0】赋了值,所以我们现在只需要走到第1行即可,不然蛇的位置就不符合题目要求,。但是当我们走到这里的时候,还没结束外层循环,也就是没有走到相当于入口的位置,所以我们现在还得往右走,即++y,当走到n-2时,我们就结束运动,此时才完成了整个外层循环,其他所有的内层循环都遵循这个规律,因此我们只需要用一个大while循环把这些个子循环包裹起来,再给其赋值退出条件,即可。下面是完整代码:

 其实我在写这题的时候,发现一个有趣的问题,那就是如果我把它的前后自增自减给换一下,那么它还能得出正确答案吗,这里我试了很多次,都以失败告终,那么为什么它一定要用前自增呢,下面我会通过一段代码来说明:

这是当n==4时候都图像,我会用一段代码来表示它每一次的坐标变化

这是每一次蛇的运动轨迹,这里很清楚的描述了 蛇的路程,那么我如果把前自增改成后自增会如何呢?

 那么蛇就会跑出地图,到另一个次元去了。

说了这么多,对于这道题,简单来说,就是先找出外层的规律也就是四个方向,分别是下,左,上,右,在判断其停止运动的条件,最后用使其循环知道满足条件退出循环。这就是这道题的整个过程。

最后,因为时间实在太晚了,还有些东西来不及写,就等明天一起把它给总结出来,本人小白一枚,若在文章中有错误之处还请多多指出,今后我也会努力提升自己的实力,争取给大家带来更好的内容。谢谢~

猜你喜欢

转载自blog.csdn.net/qq_33302352/article/details/121550345