当前位置: 代码迷 >> 综合 >> [蓝桥杯]问题 1115: DNA Python实现
  详细解决方案

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

热度:95   发布时间:2023-11-06 06:14:44.0

问题 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来控制有多少个DNAfor 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=0print()