题目 1115: DNA


题目描述

输入包含多组测试数据。第一个整数N(N<=15),N表示组数,每组数据包含两个整数a,b。a表示一个单位的DNA串的行数,a为奇数且 3<=a<=39。b表示重复度(1<=b<=20)。

输入格式

2
3 1
5 4

输出格式

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 X
X   X
 X X
  X
 X X
X   X

找规律

每一行的格式为

若干个空格 + X + 若干个空格 + X(可能没有) + 若干个空格
"{}X{}{}{}".format(
            ' '*i,						# 左边的空格
            ' '*max(0, a - 2 - 2*i),	# 中间的空格可能没有
            '' if i == t else 'X',		# 这个X可能没有
            ' '*i,						# 右边的空格
        )

\(i\in (0,1,2,1,\quad 0,1,2,1,\quad 0,1,2,1,\quad ...)\)

且\(\ 2=t=a//2\)

序列长度为\(\ (a-1)*b+1\)

代码如下

N = int(input())
DNAs = [list(map(int, input().split())) for i in range(N)]
for a,b in DNAs:
    t = a // 2
    i = 0
    di = 1
    for _ in range((a - 1) * b + 1):
        print("{}X{}{}{}".format(
            ' '*i,
            ' '*max(0, a - 2 - 2*i),
            '' if i == t else 'X',
            ' '*i,
        ))
        i += di
        if i == t:
            di = -1
        if i == 0:
            di = 1
    print()