打印菱形
文章目录
问题:输入一个奇数n,打印高度为n的菱形字符。
一日闲来无事,脑中灵光一现,突然想试试打印字符玩玩。传统的打印菱形字符的方法无外乎1.依次打印菱形的4个角。2.先打印菱形的上半部分,然后再打印下半部分。3.暴力徒手打印。网上的资料也大多依此思路实现。但是实现的代码往往雷同且有多个for循环,看起来十分别扭。
这里提供一个相对优雅的方法:
|
|
观察上面的图像,可以看到每一行的空格数(只打印左边的空格,右边的无需打印)的规律符合函数:y = abs(x + 2),其中x从0~n-1,n为菱形的高度,x为行号,y为第x行对应的左边的空格数。
更一般的,将公式推广到一般的n也是成立的,这些通过在草纸上画出函数图像即可得出。这里不再赘述。
现在有了空格数,求所需打印的字符也便容易了,想象成一个正方形的盒子,每一行除了空格就是字符,现在知道了每一行左边的空格数y,那么这一行总共有2 * y个空格,且这一行总共有n个字符,那么所需打印的字符数便为n - 2 * y。有了公式,打印菱形的代码便很容易就可以写出:
|
|