解题思路:
①先初始化中心十字架的左半部分,十字架的大小是5*5,注意此处十字架的大小是固定的。
②将左半部分斜着的5条线进行填充,接着对上班部分和左半部份的直线进行填充,围几层就填充几条线,填充个数是2*i(i是层数)。
③将左上角对称填充到左下角。然后将左半部分对称填充到右半部分。
注意事项:
图片引用自 作者: tongxian 侵权可删
参考代码:
def function(n): A = [['.' for j in range(5+4*n)] for i in range(5+4*n)] if n == 0: for i in range(5): A[2][i] = '$' A[i][2] = '$' for k in range(3): x = int((5+4*n+1)/2)-1 y = int((5+4*n+1)/2)-1-k A[x][y] = '$' xmove = x ymove = y for kk in range(n): xmove = xmove-2 ymove = ymove-2 A[xmove][ymove] = '$' for k in range(3): x = int((5+4*n+1)/2)-1-k y = int((5+4*n+1)/2)-1 A[x][y] = '$' xmove = x ymove = y for kk in range(n): xmove = xmove-2 ymove = ymove-2 A[xmove][ymove] = '$' for i in range(1,n+1): num = 2*i x = int((5+4*n+1)/2)-1-2 - num y = int((5+4*n+1)/2)-1 xmove = x ymove = y for j in range(num): A[xmove][ymove] = '$' xmove = xmove ymove = ymove-1 for i in range(1,n+1): num = 2*i x = int((5+4*n+1)/2)-1 y = int((5+4*n+1)/2)-1-2 - num xmove = x ymove = y for j in range(num): A[xmove][ymove] = '$' xmove = xmove-1 ymove = ymove for j in range(int((5+4*n+1)/2)): for i in range(int((5+4*n+1)/2)-2,-1,-1): A[5+4*n-1-i][j] = A[i][j] for i in range(5+4*n): A[i][int((5+4*n+1)/2):] = A[i][int((5+4*n+1)/2)-2::-1] for i in range(5+4*n): for j in range(5+4*n): print(A[i][j],end='') print() if __name__ == '__main__': n = int(input()) function(n)
0.0分
5 人评分
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:674 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:1555 |
C语言训练-求函数值 (C语言代码)浏览:600 |
C语言程序设计教程(第三版)课后习题9.10 (C语言代码)浏览:583 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:585 |
循环入门练习5 (C语言代码)浏览:907 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:729 |
C二级辅导-等差数列 (C语言代码)浏览:806 |
企业奖金发放 (C语言代码)浏览:2462 |
字符串比较 (C语言代码)浏览:770 |