原题链接:蓝桥杯2013年第四届真题-打印十字图
解题思路:
①先初始化中心十字架的左半部分,十字架的大小是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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复