解决字符的正方形输出问题

字符的正方形输出

笔者认为:程序的核心是算法,算法的核心是问题中蕴含的规律。而找到最简单的那一条,可以使程序更加简单。

那现在我们来看一下题目:
在这里插入图片描述

可以看到多余的元素不被显示
题目要点为顺时针输出,而且是正方形。

由于输出的不可逆性,所以我们确定必须是一行接一行来进行字符的输出的。

顺时针是比较容易的,我们只要确定输出的数组元素的下标就好了。
关键是正方形,还有数组的长度并不满足刚好为正方形的情况下我们想要在循环中输出靠末尾的数字是毫无头绪的。

对此我们必须对数组进行割断。通过观察发现,满足正方形的元素个数都是4的倍数。所以对于那些大于4的倍数或小于4的倍数的数组总长度,我们将其除以4,赋值给十进制的另一个数c,然后将c再乘以4这样就得到一个长度为4的倍数的值d。然后以d为极限下标将旧数组中不超过d的值都赋值给新数组。这就是这个问题的核心规律了。

接下来就是空格数和输出的行数(这里指的是夹顶层和底层之间的代码行)了。通过观察很容易发现,输出的行数是顶层的元素个数减去2。空格数的确定则是总的长度个数除以4再减去1。

核心问题解决了,剩下的就好办了。

先实现代码的第一行输出。

第一行:顺序输出(没什么技术含量,懂的都懂)

第二行:输出中间的代码行,由两个for循环实现。第一个for循环笼罩着第二个for循环来确定输出的行数。第二个for循环用来输出空格使形状看起来是正方形。

第三行:逆序输出(还是没什么技术含量,注意这里要接着左边的竖着的那排的序号输出

直接看代码:在这里插入图片描述

输出结果:

在这里插入图片描述

在这里插入图片描述
总之:我们要清除的认识到:算法是程序的核心,算法的核心是规律。我们要发现规律,就要耐心去寻找。

此外:借用英雄联盟里无极剑圣的一句话:真正的大师,是永远有一颗学徒的心!。

如有错误,欢迎指正。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值