我被分配给一个算法输出编码(用纯 ASCII 码,没有花哨的图纸),对于给定的 K,一个 KxK 正方形,对称线为 x,其他东西为 o。但是,如果 K 是偶数,我们使用两条 x'es 来标记水平和垂直对称线。此外,我们不能在整个源代码中使用两个以上的循环。
所以我有两个想法。首先是分析每个点应该满足的坐标——每个点应该有一个方程告诉我们给定的 (Kx, Ky) 点是 x 还是 o。我们把它放在一些 if 和只是 while 循环的交替中,遍历所有可能的 (Kx, Ky),将一些点标记为 x,其他点标记为 y。这需要一个循环。
另一个想法,相当蛮力但不让我们分析所有点,是有一组变量,然后我们用来连接字符串。让我解释一下:我们有一个 while 循环检查“height”变量(每转一圈,我们将其减一),在其中我们使用一些 repeatString 的自定义方法,该方法也包含一个 while 循环(它只是将字符串乘以给定t 次)。所以我们有这样的事情:
while(height):
if height==maxHeight OR ==0: print repeatString("x", maxWidth)
else if height is an element of markedKy (an array telling us which Ky's to mark as x'es as the whole): print repearString("x", maxWidth)
else print "x"+(howManySpaces*" ")+"x" ["xx" if even] + (howManySpaces*" ") +"x"
...等等。我上面写的当然很松散,并没有涵盖很多情况(实际上,它做了很多),但我认为这可能会使我的概念不那么混乱。然而,第二种方法对编码来说真的很痛苦——我现在可以看到它是多么容易出错。
有没有第三种最好的方法?我对此很头疼,虽然它看起来很容易,但想不出其他任何东西。