数组处理,形状

时间:2015-01-18 12:39:31

标签: arrays drawing

我有一个正方形的2d值数组,其中每一行是相同的,并且行的每个元素都比最后一个大。例如:

1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 2 3 4 5 6 7

我想过滤它们,这样我就可以制作钻石了:

          1
        1 2 3
      1 2 3 4 5
    1 2 3 4 5 6 7
      1 2 3 4 5
        1 2 3
          1

注意如何使用数组的第一部分,无论要在该行上打印多少元素。而且,间距并不重要。我把它们隔开来展示钻石。

我知道如何过滤右上角&#34; chunk&#34; out,使用j-i<(j/2)。这会将原始方块转换为:

1 
1 2 3 
1 2 3 4 5
1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 2 3 4 5 6 7

我怎样才能找到最右边的&#34; chunk&#34;过滤掉了吗?我可以对这些值施加什么附加条件?

1 个答案:

答案 0 :(得分:0)

假设您已经找到并存储了&#34; side&#34;的长度。那个广场已经可以用下面的东西了。但是,如果您的方块长度均匀,那么它将无法工作(无法通过均匀的边长方形生成钻石)。

以下是伪代码,因此您需要根据您的语言进行调整。我还使用了0索引数组,假设square是2D数组。

for (i=0, i<length, i++)
{
    for (j=0, j<Length, j++)
    {
        if (i < length/2)
        {
            if (j < length/2 AND j <= i)
                print square[i][j]
            }
        }
        else
        {
            if (j < length/2 AND j <= (length - i))
            {
                print square[i][j]
            }
        }
    }
    print newline
}