解决字符的正方形输出问题
字符的正方形输出
笔者认为:程序的核心是算法,算法的核心是问题中蕴含的规律。而找到最简单的那一条,可以使程序更加简单。
那现在我们来看一下题目:
题目要点为顺时针输出,而且是正方形。
由于输出的不可逆性,所以我们确定必须是一行接一行来进行字符的输出的。
顺时针是比较容易的,我们只要确定输出的数组元素的下标就好了。 关键是正方形,还有数组的长度并不满足刚好为正方形的情况下我们想要在循环中输出靠末尾的数字是毫无头绪的。
对此我们必须对数组进行割断。通过观察发现,满足正方形的元素个数都是4的倍数。所以对于那些大于4的倍数或小于4的倍数的数组总长度,我们将其除以4,赋值给十进制的另一个数c,然后将c再乘以4这样就得到一个长度为4的倍数的值d。然后以d为极限下标将旧数组中不超过d的值都赋值给新数组。这就是这个问题的核心规律了。
接下来就是空格数和输出的行数(这里指的是夹顶层和底层之间的代码行)了。通过观察很容易发现,输出的行数是顶层的元素个数减去2。空格数的确定则是总的长度个数除以4再减去1。
核心问题解决了,剩下的就好办了。
先实现代码的第一行输出。
第一行:顺序输出(没什么技术含量,懂的都懂)
第二行:输出中间的代码行,由两个for循环实现。第一个for循环笼罩着第二个for循环来确定输出的行数。第二个for循环用来输出空格使形状看起来是正方形。
第三行:逆序输出(还是没什么技术含量,注意这里要接着左边的竖着的那排的序号输出
直接看代码:
输出结果:
总之:我们要清除的认识到:算法是程序的核心,算法的核心是规律。我们要发现规律,就要耐心去寻找。
此外:借用英雄联盟里无极剑圣的一句话:真正的大师,是永远有一颗学徒的心!。
如有错误,欢迎指正。