Kitty猫基因编码

 

Kitty猫基因编码

【题目描述】


小可可选修了基础生物基因学。教授告诉大家Super Samuel星球上Kitty猫的基因的长度都是2的正整数次幂2k(k≤8),全是由两种不同的基因单元组成的。这两种不同的基因单元分别记成01,于是Kitty猫基因可以写成一个01串表达式s
为了便于分析和降低数据存储量,教授发明了ABC编码规则。该编码规则是不断地按照

Kitty 猫基因 01 串表达式 s 进行改写,直至最终被改写成只含有字符“A”“B”“C”的符号串。
例如:
T(01001011)
=CT(0100)T(1011)
=CCT(01)T(00)CT(10)T(11)
=CCCT(0)T(1)ACCT(1)T(0)B
=CCCABACCBAB

请你编写程序帮助小可可求出Kitty猫基因的ABC编码以协助教授开展科研工作。

【输入】

以一行的形式存放了一个 Kitty 猫基因的 01 串表达式。

【输出】

以一行的形式输出这个 Kitty 猫基因的 ABC 编码。

【输入样例】

00

【输出样例】

A

【提示】

样例2:
输入
01001011
输出
CCCABACCBAB

 

解题思路:

题目里要求已经讲得很明白了,很显然,这道题用递归做最合适。

根据 3条指示很容易写出判断条件。

1.  S为空子串时退出返回

2.  S串全是0时,退出返回‘A

3.  S串全是1时,退出返回‘B

4.将S串分成两部分,继续递归,并加C

 

 

程序:

Program  kitty;

var

  s:ansistring;

function asd(s:ansistring):ansistring;

var

  i,len,max0,max1:longint;

  s1,s2:ansistring;

begin

  if s='' then exit;

  len:=length(s);

  max0:=0;s1:='';

  max1:=0;s2:='';

  for i:=1 to len do

  if s[i]='0' then inc(max0)

              else inc(max1);

  if max0=len then exit('A');

  if max1=len then exit('B');

  for i:=1 to len div 2 do

  begin

  s1:=s1+s[i];s2:=s2+s[i+(len div 2)];

  end;

  asd:='C'+asd(s1)+asd(s2);

end;

begin

  readln(s);

  s:=asd(s);

  writeln(s);

end.
posted @ 2012-07-18 08:13  Mose  阅读(1027)  评论(0编辑  收藏  举报