打印菱形
【题目】打印输出一个边长为 N 的菱形,当N=5时,如图:
用函数式的想法,不会仔细去安排每个星号的位置和空格的数目。
它首先会注意到对称性。
只要造出了它的四分之一,再变换拼接即可。
代码很短:
base n = [ replicate i ' ' | i<-[0..n] ]
left n = zipWith (\x y-> x ++ "*" ++ y) (base n) (tail $ reverse (base n))
half n = zipWith (++) (left n) (map (tail.reverse) (left n))
ok n = reverse (half n) ++ tail (half n)
main = putStr $ unlines (ok 5)
base 造了一个渐多的空格序列。
left 就是四分之一。
搞清楚如何左右镜像和上下镜像就行了。
祝编码愉快。