zoukankan      html  css  js  c++  java
  • Kitty猫基因编码

    Kitty猫基因编码

    【题目描述】


    小可可选修了基础生物基因学。教授告诉大家Super Samuel星球上Kitty猫的基因的长度都是2的正整数次幂2k(k≤8),全是由两种不同的基因单元组成的。这两种不同的基因单元分别记成01,于是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.
  • 相关阅读:
    .Net培训个人总结笔记1
    .Net培训个人总结笔记0——前言
    python访问数据库
    默认构造函数
    VC使用中一些常见问题
    使用VC进行调试
    sqlite3.OperationalError: Could not decode to UTF8 column XXX with text '***'
    cent os 5.5 安装
    initialization of xxx is skipped by xxx
    VC程序启动时隐藏主窗口
  • 原文地址:https://www.cnblogs.com/nbalive2001/p/2596717.html
Copyright © 2011-2022 走看看