HackerRank Designer Door Mat题算法通俗讲解及逻辑说明
Designer Door Mat 题解
核心规律推导(数学逻辑)
先明确题目给出的基础参数规则:
- N为奇数,M=3*N
- 图案上下完全对称,中心行固定为WELCOME字样
我们可以把整个门垫拆成三部分分别推导规则:
- 行索引规则:总行数为N,中心行的索引为
N//2(从0开始计数),中心行上方和下方各有N//2行 - 上半行(中心行以上)规则:
对第i行(i从0到N//2 -1):- 中间
.|.的数量为2*i + 1(i=0时1个,i=1时3个,逐行加2,和样例规律完全匹配) - 每个
.|.占3个字符,因此中间图案部分总长度为3*(2*i +1) - 剩余字符全部用
-填充,且需要左右对称,因此左右两侧-的数量为(M - 3*(2*i +1)) // 2
- 中间
- 中心行规则:
WELCOME固定长度为7,左右两侧-的数量为(M -7) //2 - 下半行规则:和上半行图案完全一致,仅倒序输出即可
Python代码实现
# 读取输入的N和M n, m = map(int, input().split()) # 打印上半部分 for i in range(n//2): pattern_num = 2 * i + 1 fill_len = (m - 3 * pattern_num) // 2 print('-' * fill_len + '.|.' * pattern_num + '-' * fill_len) # 打印中心WELCOME行 welcome_fill = (m - 7) // 2 print('-' * welcome_fill + 'WELCOME' + '-' * welcome_fill) # 打印下半部分(倒序遍历上半部分的索引即可) for i in range(n//2 - 1, -1, -1): pattern_num = 2 * i + 1 fill_len = (m - 3 * pattern_num) // 2 print('-' * fill_len + '.|.' * pattern_num + '-' * fill_len)
你可以用样例输入9 27测试,输出和题目给出的样例完全一致。
内容的提问来源于stack exchange,提问作者Rohan Shah
相关产品推荐
相关产品推荐

