前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「优质题解」DNA

「优质题解」DNA

作者头像
编程范 源代码公司
发布2020-01-03 09:32:30
5790
发布2020-01-03 09:32:30
举报

这道题的地址,想尝试的小伙伴可以来试哦:

https://www.dotcpp.com/oj/problem1115.html

思路:

(这里A,B就是题目中的a,b);

1.总的思路,把整个DNA的输出变成得到每一行,然后输出;

2.首先得到DNA的第一行,用字符数组记录;

3.第一行DNA的宽度就是A,即字符数组的有效长度为A,且第一行DNA的型式都是第一个字符和最后一个字符都是'X' 中间的为空格;

4.交换X得到下一行的DNA;(交换如图)k代表空格;

x k k k x

k x k x k

k k x k k

k x k x k

x k k k x

5.交换的注意事项在下面(注意事项里);

6.把整个DNA的输出变成每一行的输出;

7.输出第一行,交换后;

8.再次递归处理,直到输出所有行;

9.每组DNA输出的行数等于A*B-(B-1);(即DNA的行数,也就是递归的次数,题目例子中如上图输出4组,就是A*B-(B-1)==17行).

注意事项: 首先重复度并不是把上面图中内容,重复的输出几次;注意第一个重复度,与第二个之间公用一行,这也就是为什么行数等于:A*B-(B-1);

1.交换并不是简单的,把第一个X和后面的空格交换,以及把最后一个X和它前面的空格交换;

2.交换时,必须先记录第一个位置(p)的X,和最后一个位置(q)的X;

3.然后让(p)位置的X,等于它后面的空格,让(q)位置的X等于它前面的空格;

4.然后再把前面记录的X,放到它们各自交换了的空格上;

if(p==A-1&&q==0) 这句代码,表示交换了一个来回了,需要重置p,q;

交换实现代码:

这样交换是因为:当交换到图中,绿色标记的X的位置时,会导致,它前后的交换不正确;具体为什么会不正确,你可以先随意的按照最简单的交换思路来试试,如下代码自己走一遍就知道为什么不行了;

最终代码:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程范 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档