1.c实现
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 //从左往右的尝试 5 //规定1和A对应,2和B对应、3和C对应...那么一个数字字符串比如”111“ 6 //就可以转化为”AAA” 、“KA”和“AK” 7 8 //给定一个只有数字字符组成的字符串str,返回有多少种转化结果 9 int process(char *str, int i){ 10 if(i==strlen(str)) 11 return 1; 12 13 //i没有到终止位置 14 if(str[i]=='0'){ 15 return 0; 16 } 17 //str[i]字符不是‘0’ 18 if(str[i]=='1'){ 19 int res = process(str,i+1);//i自己作为单独的部分,后续有多少种方法 20 if((i+1)<strlen(str)) 21 res += process(str,i+2); //(i和i+1)作为单独的部分,后续有多少种方法 22 return res; 23 } 24 if(str[i]=='2'){ 25 int res = process(str,i+1);//i自己作为单独的部分,后续有多少种方法 26 //(i和i+1)作为单独的部分并且没有超过26,后续有多少种方法 27 if((i+1)<strlen(str) && (str[i+1]>='0' && str[i+1]<='6')){ 28 res += process(str,i+2); 29 } 30 return res; 31 } 32 //str[i] == '3' ~ '9' 33 return process(str,i+1); 34 } 35 36 int main(){ 37 char* str = malloc(sizeof(char)*8); 38 printf("请输入数字字符串:"); 39 scanf("%s",str); 40 char* ch={'A','B','C','D','E','F','G','H','I','J','K','L','M','N', 41 'O','P','Q','R','S','T','U','V','W','X','Y','Z'}; 42 int res = process(str,0); 43 printf("%d",res); 44 //char c; 45 // while((c=process(str,0))!= '0'){ 46 // printf(ch); 47 //} 48 return 0; 49 }