概述
【题目描述】
小可可选修了基础生物基因学。教授告诉大家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;
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.转载于:https://www.cnblogs.com/nbalive2001/archive/2012/07/18/2596717.html
最后
以上就是斯文发夹为你收集整理的Kitty猫基因编码的全部内容,希望文章能够帮你解决Kitty猫基因编码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复