首页 > 试题广场 >

题目标题: 基因编码

[问答题]

题目标题:

基因编码

题目描述:

小可可选修了基础生物基因学。教授告诉大家Super Samuel星球上Kitty猫的基因的长度都是2的正整数次幂 2k (k 8),全是由两种不同的基因单元组成的。这两种不同的基因单元分别记成 0 1,于是Kitty猫的基因可以写成一个 01 串表达式 S 。为了便于分析和降低数据存储量,教授发明了 ABC 编码规则。该编码规则是不断地按照 A (S串全是0) TS= B (S串全是1) CT(S1)T(S2) (否则把S串分成两个等长的子串S1S2) 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串表达式, 字符串长度不超过500

输出描述:

对应测试数据,以一行的形式输出这个Kitty猫基因的ABC编码。

样式输入:

01001011

样式输出:

CCCABACCBAB

#include <stdio.h>

#include <string.h>
void ABC(char str[],int star,int end)
{
int a=0,b=0,i;
for(i=star;i<end;i++)
{
if(str[i]=='0')
a++;
else if(str[i]=='1')
b++;
}
if(a==end-star)
printf("A");
else if(b==end-star)
printf("B");
else
{
printf("C");
ABC(str,star,(star+end)/2);
ABC(str,(star+end)/2,end);
}
}
int main()
{
char str[500],l;
gets(str);
l=strlen(str);
ABC(str,0,l);
return 0;
}

发表于 2017-05-17 04:17:08 回复(0)