题面描述
给出一个数 n ,打印 n 层十字架。如下图所示为 n = 1 时的十字架
输入数据
输入数据的第一行为一个正整数 T ,表示有 T 组数据。接下来的 T 行中每行为一个正整数 n ,表示输入的层数 (T <= 20, 0 < n <= 20) 。
输出数据
输出 T 组结果,每一组输出的第一行为 “Case #x:” ,冒号后面没有空格,随后为该组数据的答案。
样例输入
2
1
2
样例输出
心得:本来有点的想法,但看到大佬的思路就不好意思说了……附大佬代码,见贤思齐
T = int(input())
for t in range(T):
n = int(input())
rc = 5 + 4 * n #矩阵阶数
square = [['.']*rc for i in range(rc)] # 矩阵初始化
for j in range(rc // 2 - 2,rc // 2 + 3): # 画中心十字
square[rc // 2][j] = square[j][rc // 2 ] = '$'
for j in range(1, n+1): #x,y为矩阵点坐标
x = j * 2
y = 2 * j - 1
square[x][y] = square[x][y + 1] = square[x - 1][y + 1] = '$' # 左上角
y = rc - j * 2 - 1
square[x][y] = square[x][y + 1] = square[x - 1][y] = '$' # 右上角
x = rc - j * 2 - 1
square[x][y] = square[x][y + 1] = square[x + 1][y] = '$' # 右下角
y = 2 * j - 1
square[x][y] = square[x][y + 1] = square[x + 1][y + 1] = '$' # 左下角
for jj in range(j * 2,rc - j * 2): # 旋转赋值,能节省一层循环
square[jj][(j - 1) * 2 ] = square[(j - 1) * 2 ][jj] = square[rc - (j - 1) * 2 - 1][jj] = square[jj][rc - (j - 1) * 2 - 1] = '$'
print("Case #%s:"%(t + 1))
for i in range(rc):
print("".join(square[i])) #将数组转为字符串输出