本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。
问题描述
打印大X
样式要求:
高度=15, 笔宽=3
*** ***
*** ***
*** ***
*** ***
*** ***
*** ***
*****
***
*****
*** ***
*** ***
*** ***
*** ***
*** ***
*** ***
高度=8, 笔宽=5
***** *****
**********
********
******
******
********
**********
***** *****
为了方便检查空格用‘.’代替
解决方案
一个叉大概分三个环节
一是最开始笔宽不交叉中间有空的地方
二是中间交叉但又比笔宽大的地方
三是中间等于笔宽的地方
将三个地方分开实现打印用while循环给定条件就行了。
h,x=map(int,input().split(' '))
m=h-x-1
i=0
while m>0:
print('.' * i + '*'*x + "." * (m) + '*'*x + '.' * i)
m-=2
i+=1
s=q=h+x-1-2*(i)
while q>=x:
print('.'*i+'*'*q+'.'*i)
q-=2
i+=1
q=q+4
i=i-1
while q<=s:
i=i-1
print('.' * i + '*' * q + '.' * i)
q+=2
m=m+2
i-=1
while m<=h-x-1:
print('.' * i + '*' * x + "." * (m) + '*' * x + '.' * i)
m+=2
i-=1