输入一个长为n=2k(k≤8)01串s,按照"ABC编码规则"进行编码,ABC编码规则是:

                                                                 A                      //若s串全是0

                                                  T(s)=       B                      //若s串全是1

                                                                 CT(s1)T(s2)     //否则把s串分成两个等长的子串s1和s2

例如:

     T(01001011)

=CT(0100)T(1011)

=CCT(01)T(00)CT(10)T(11)

=CCCT(0)T(1)ACCT(1)T(0)B

=CCCABACCBAB

#include <stdio.h>
#include <string.h>
void f(char a[],int begin,int end)
{
int num_A=0,num_B=0;
int i;
for(i=begin;i<end;i++)
{
if(a[i]=='0')
num_A++;         //记录0的个数 
else if(a[i]=='1')
num_B++;         //记录1的个数 
}
if(num_A==end-begin)//如果该数组全为0 
printf("A");
else if(num_B==end-begin)//如果该数组全为1 
printf("B");
else
{
printf("C");
f(a,begin,(end+begin)/2); 
f(a,(end+begin)/2,end);
}
}
int main()
{
char a[500];
int length;
gets(a);
length=strlen(a);
f(a,0,length);
return 0;
}

 

 

  

 

 

相关文章:

  • 2021-05-13
  • 2022-12-23
  • 2022-01-20
  • 2021-12-19
  • 2021-04-07
  • 2021-04-24
  • 2022-12-23
猜你喜欢
  • 2021-11-15
  • 2022-02-12
  • 2022-02-04
  • 2020-02-27
  • 2021-09-13
  • 2021-11-04
  • 2021-09-19
相关资源
相似解决方案