[蓝桥杯]问题 1115: DNA Python实现

问题 1115: DNA

题目描述
小强从小就喜欢生命科学,他总是好奇花草鸟兽从哪里来的。终于, 小强上中学了,接触到了神圣的名词–DNA.它有一个双螺旋的结构。这让一根筋的小强抓破头皮,“要是能画出来就好了” 小强喊道。现在就请你帮助他吧
输入
输入包含多组测试数据。第一个整数N(N<=15),N表示组数,每组数据包含两个整数a,b。a表示一个单位的DNA串的行数,a为奇数且 3<=a<=39。b表示重复度(1<=b<=20)。
输出
输出DNA的形状,每组输出间有一空行。
样例输入
2
3 1
5 4
样例输出

解题思路:
确定X的位置
我们可以把每一行看成一个m个元素的列表,列表中的每一行X的位置都在变化。
变化规则:0/m-1 1/m-2  2/m-3  3/m-4 …… 0/m-1  1/m-2  2/m-3…
我们用一个变量p来控制X的位置,初始值为0,每次循环让它加1,当它的值与m-1值相同时,又让它的值从0开始。
如何控制p的值在0与m-1之间循环变化,又要跟循环控制变量相关呢?发现用 i%(m-1) 可以将数值控制在0、1、2 、… m-2 间循环。
确定行数:
一共要输出 m * n - n + 1 行
代码实现

k=eval(input()) #输入一个数值给k, 用k来控制有多少个DNA

for kk in range(k):
    m,n=map(int,input().split())  #m表示每一行有多少个符号,n表示有多少个DNA链
    p=0    #p用来控制X的位置
        
    for i in range(m*n-n+1):      #循环控制行数及每行输出
        ls=list(' '*m)          #初始化列表为m个空格,
        if p == i%(m-1) :     #当p的值与i%(m-1)相同时,则将列表中位置p和 m-1-p的值改为’X’
            ls[p]='X'
            ls[m-p-1]='X'
        for s in ls:        #将修改过的列表在一行中输出
            print(s,end='')

        p+=1         #将p的值加1,以对应下一行X的位置
        print()       #控制换行
        if p==m-1 :   #当p==m-1时,又回到为0时的输出位置
            p=0
    print()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值