给定单个正整数作为输入,以这种形式返回一个收敛的zigzag字符串列表、字符列表或换行符分隔字符串:
#
#
#
#
#
#
#
#
#
#
#
您可以用任何一致的非空格字符替换#
。允许在每一行上使用尾随空格,并允许使用尾换行符。
zag从列1
开始,每一行向右移动一列,直到到达n
列(其中n
是输入)。然后,它向左移动到2
,然后向右移动到n-1
,然后向左移动到3
,两个界会聚到中间列((n+1)/2
)的Z字形结束。
上面的例子是5
的测试用例。
以下是单个测试用例:
3
#
#
#
#
7
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
1
#
发布于 2017-07-22 17:28:49
f(n,a,b){puts("0");for(a=n;--a>n/2;)for(b=n-2*a;b<=2*a-n;)printf(" %*d\n",a-abs(b++),0);}
通过分析(对于n=7)空间数的顺序来工作:
0
1 2 3 4 5 6 5 4 3 2 1
2 3 4 5 4 3 2
3 4 3
对于n=3:
0
1 2 1
我们可以看到中间数(代码中的a
)从[n-1,n/2]运行。然后,第一个数字和中间数字之间的区别是:
a n b 2a-n
-------------
6 7 5 5
5 7 3 3
4 7 1 1
2 3 1 1
所以,如果我们让b
通过-( 2a-n ),2a-n,a-abs(b)
会给我们想要的序列。这本质上就是代码所做的。
发布于 2017-07-22 18:38:00
https://codegolf.stackexchange.com/questions/135056
复制相似问题