入门题集----08----kitty猫的基因编码

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);
}
 

猜你喜欢

转载自blog.csdn.net/DorisBao1021/article/details/81099097
今日推荐