云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

香港服务器_捉迷藏百度云_最新活动

小七 141 0

前段时间在浏览社区网站时,我遇到一个问题,有人要求在ABAP中输出蝴蝶图案。通常,新云,在其他编程语言如C++或java的访谈中,此类问题是常见的,其中参与者被要求开发一个短程序,以解决给定问题,例如在斐波那契序列上生成或执行某些操作,排序一些数组或列表与一些独特的条件或实现二进制搜索等

但ABAP!!!我很高兴地知道,现在阿巴斯被视为普通程序员,或者至少世界已经开始问那些其他程序员已经回答了很长一段时间的问题。

这个博客的原因不是提出一个解决方案,而是解释这个解决方案是如何实现的。提出的解决方案是我如何理解和解决这个问题。我相信会有很多其他的方法来解决这个问题。欢迎您分享您的解决方案。

问题

对于给定的数字(例如3)输出一个模式,应该如下

图1

因为您可以看到输出匹配一个蝴蝶翅膀(以符号的方式),因此命名为蝴蝶模式。

解决方案

因为我们讨论的是任何给定数字n的通用解决方案,它是最好有更多不同数字的输出实例,并尝试在那里找到模式。让我们有一个4和5的模式。

图2

图3

我们可以观察到输出是一个平方矩阵,输出中的行数和列数相等。这是第一个观察结果。

然后我们尝试在输入n和中的行/列数之间建立一个链接输出。所以呢我们观察到,大数据治理平台,什么是云服务器,对于输入3,输出中有5行/列,对于输入4,输出中有7行/列,对于输入5,输出中有9行/列。

解决了行/列问题。我们已经从这些例子中看到,对于任何给定的输入n,行/列的数量将是2n-1。

好的,因此我们可以有两个循环(从1到2n-1),其中外部循环可以是列,内部循环可以是行,反之亦然,这取决于我们选择的逻辑。在这个解决方案中,我选择了填充列,因为这似乎更容易。如果你看一下图1,2,3,你会发现一列中的值要么是空格要么是数字。如果它是一个数字,整列都是一样的

这样我们就可以有列的外循环和行的内循环,我们要填充一个完整的

现在我们要找出一个给定的列,打印值的逻辑或公式是什么?我们如何处理空格或空白值。

首先打印每列中的数字或值。

参考图1、2、3,我们看到第一列总是用数字n填充,下一列用n-1填充,下一列用n-2填充,直到值达到1为止。一旦它达到1,它就开始递增。所以后面的列的值是2,下一列的值是3,下一列的值是…………你明白了,

我们可以观察到的模式是,列的值从n开始,它不断减小,直到它达到1,然后它不断增大,直到它再次达到n。例如,如果我们看一下图3(5的蝴蝶模式),我们可以看到下面的模式(只参考下表的前两列)

我们可以在这里开发一些逻辑吗?看看上表,我们可以看到列数和值之间的差异是恒定的。在本表中,请注意第三列。这里我们从给定的输入n中减去列数。结果值从4波动到-4。查看上表的前五行,我们可以在这里假设一个公式,如

PrintValue=(n–Column)+1

但是对于第六行,这将失败,因为在这种情况下,n–Column将导致5-6=-1。如果我们使用"绝对"值函数呢?这可以解决问题。所以上面的公式可以重写为

PrintValue=ABS(n–Column)+1"ABS将返回给定参数的绝对值

这解决了在每列中打印什么值的问题

所以我们的伪代码将变成类似

的东西,现在我们解决了空格的问题。如何处理空白值?如果我们再看一看图3,我们可以看到这里的空白模式。因为我们在这个解决方案中首先尝试填充列,所以让我们分析这些列,看看是否有空格的模式。对于第1列,没有空格。对于第2列,我们有两个空白值:第一行和最后一行。同样,对于第3列,我们总共有4个空格,上面两行有两个空格,下面两行有两个空格。

参考上表,如果我们暂时忽略下面的行,我们可以看到一个模式。空格的顺序是从0到4再回到0。这个模式非常像我们在上面的"值"部分看到的模式,我们使用ABS函数来获得绝对值。我们能在这里重用这个"价值"吗?看来我们可以。见上表第四栏。此公式返回任何给定列的空格数(顶部或底部)。一旦我们有了这个值,我们就称之为pad value,我们可以使用一个简单的if语句来检查当前行是否应该打印为空或者"PrintValue"

if语句可以是类似

的东西上面的代码片段可以覆盖顶部。对于最下面的部分,我们需要添加一些类似于