我需要创建具有遵循这些模式的某些值/属性的数组。
不幸的是,我的数学知识不允许我找到规律。
以下是应在(从下到上)n = 1、2 和 3 处输出的数组示例(计算每条边上的红色框)。
所有红色和绿色方块都应该分配一些值,而所有白色方块都需要未定义(或空、空等)。
创建数组,如何动态分配它们各自的红/绿/白值?
for (var x = 0; x < n * 4 - 1; x++)
{
for (var y = 0; y < n * 4 - 1; y++)
{
board[x][y] = green, red or white?;
}
}
PS:如果不明显,该图案会创建“红色”边长为的六边形n
.
每个六边形都由三部分组成(从上到下):
上半部分以覆盖整个宽度的绿线终止
一条红色方格线
下半部分以一条覆盖整个宽度的绿线开始
上半部和下半部是它们自身的镜像,反射在 2 中的线上。
对于给定的n,总行数为2n - 1 + 2n. The 2 n - 1术语是由于红线:有2 n其中两个(最长的)是一个叠在一起的。这2 n术语是由于绿线(它是红线的数量 + 1)。
下面是绘制上半部分的 Python 代码(开头的第 1 项):
def print_hex_upper_half(n):
num_lines = 2 * (n - 1) + 1
width = (2 * n - 1) + 2 * n
for i in range(1, num_lines + 1):
if i % 2 == 1:
s = n - i / 2 - 1
print ' ' * s + 'G' * (width - 2 * s) + ' ' * s
else:
s = n - i / 2 + 1
rw = (width - 2 * s + 1) / 2
print ' ' * s + ' '.join('R' * rw) + ' ' * s
这是运行时的情况:
>>> print_hex_upper_half(4)
GGGGGGGGG
R R R R
GGGGGGGGGGG
R R R R R
GGGGGGGGGGGGG
R R R R R R
GGGGGGGGGGGGGGG
>>> print_hex_upper_half(3)
GGGGGGG
R R R
GGGGGGGGG
R R R R
GGGGGGGGGGG
>>> print_hex_upper_half(2)
GGGGG
R R
GGGGGGG
>>> print_hex_upper_half(1)
GGG
中间的线很简单,下半部分是反射,因此只需操纵指数即可。
下面是代码的详细解释:
由于上述原因,上半部分的行数为2 (n - 1) + 1,宽度已在上面给出。
奇数行为绿色,偶数行为红色。
出于与上述相同的原因,绿行以以下内容开始和结束:n - i / 2 - 1空间。其余的是绿色的。
同样,出于与上面给出的相同原因,红行以我/2+1空间。其余部分为红色,中间散布着空格。如果我们从宽度中减去这个值,加 1,然后除以 2,我们就得到了红色块的数量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)