大大的叉
题目内容:
打印出n阶的“叉”,这个叉图案由字符‘+’和‘X’构成,n越大,这个图案也就越大
输入格式:
一个正整数n,1<=n<=20
输出格式:
一个n阶叉图案
输入样例:
1
输出样例:
X
输入样例:
3
输出样例:
X+++X
+X+X+
++X++
+X+X+
X+++X
输入样例:
7
输出样例:
X+++++++++++X
+X+++++++++X+
++X+++++++X++
+++X+++++X+++
++++X+++X++++
+++++X+X+++++
++++++X++++++
+++++X+X+++++
++++X+++X++++
+++X+++++X+++
++X+++++++X++
+X+++++++++X+
X+++++++++++X
My answer
思路一:先从例子里找规律。。
X+++X # 0个+, 1个X, 3个+,1个X,0个+
+X+X+ # 1个+, 1个X, 1个+,1个X,0个+
++X++ # 2个+, 1个X,2个+
+X+X+ #
X+++X #
最中间的那一行,给一条命令打出来,第一、二行跟四、五行对称,我只要打出上半部分,下半部分倒着过来打就好了
n = int(input())
for i in range(n - 1):
print('+' * i + 'X' + "+" * (2 * (n - i) - 3) + 'X' + '+' * i)
print('X'.center(2 * n - 1, '+'))
for j in range(n-2,-1,-1):
print('+' * j + 'X' + "+" * (2 * (n - j) - 3) + 'X' + '+' * j)
思路二:老师的解法:为方便理解,直接取值为3
n = int(input()) - 1 # n=2
lst = ['X'] * (2 * n + 1) # lst = ['x','x','x','x','x']
for i in range(n): # 循环2次,打出前两行
s = '+' * i + 'X' + '+' * (n - i - 1) # 打出每一行的前半部分
s = s + '+' + s[::-1] # 把 s 倒过来合并字符串
lst[i] = lst[-1 - i] = s # 循环替换lst[i]的值
lst[n] = "+" * n + 'X' + '+' * n # 把中间一行,即第2行进行修改
for l in lst:
print(l) # 遍历lst里的元素,输出
我的方法非常老实,就是一个个把需要的字符串打印出来,老师的方法用了列表,利用了图案的对称,列表的方法,就 lst[i] = lst[-1 - i] = s, 这个就看出我跟老师的差距了 ╮(╯_╰)╭