【题目描述】
小可可选修了基础生物基因学。教授告诉大家Super Samuel星球上Kitty猫的基因的长度都是2的正整数次幂2k(k≤8),全是由两种不同的基因单元组成的。这两种不同的基因单元分别记成0和1,于是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;
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
s1:=s1+s[i];s2:=s2+s[i+(len div 2)];
end;
asd:='C'+asd(s1)+asd(s2);
readln(s);
s:=asd(s);
writeln(s);