kitty猫的基因编码
【问题描述】
kitty 的基因编码如下定义: kitty的基因由一串长度2^k(k<=8)的01序列构成,为了方便研究,需要把,01序列转换为ABC编码。用T(s)来表示01序列s的 ABC编码 T(s)=‘A'(当S全由'0'组成) T(s)=‘B'(当s全由'1'组成) T(s)=‘C'+T(s1)+T(s2) s1,s2为把s等分为2个长度相等的子串 比如 T('00')='A' T('00001111')='CAB'
【要求】
【数据输入】一行,长度为2^k,为kitty猫的01基因编码,有多个数据
【数据输出】一行,由ABC构成的ABC编码
【样例输出】
01001011
【样例输出】
CCCABACCBAB
对 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。判断条件:
1. 当S为空子串时退出返回
2. 当S串全是0时,退出返回‘A’
3. 当S串全是1时,退出返回‘B’
4.将S串分成两部分,继续递归,并加C。
#include<stdio.h>
#include<string.h>
int len;
char s[100000];
int judge(int l,int r)
{
int sum0=0,sum1=0;
for(int i=l;i<=r;i++)
if(s[i]=='0') sum0++;
else sum1++;
if(sum0==r-l+1) return 1;
else if(sum1==r-l+1) return 2;
else return 0;
}
void dfs(int l,int r)
{
if(judge(l,r)==1)
{
printf("A");
return ;
}
else if(judge(l,r)==2)
{
printf("B");
return ;
}
else
{
printf("C");
dfs(l,(l+r)/2);
dfs((l+r)/2+1,r);
}
}
int main()
{
scanf("%s",s);
len=strlen(s);
dfs(0,len-1);
}