C语言:电话号码字母排列

2023-11-10

这点B玩意写了一下午加一晚上,但是理解了回溯法也值了。
具体解释我写在注释里
#include<stdio.h>
char a[1000];//最后要输出的
int f=0;//全局变量当做指针
int a1[10]={0,1,2,3,4,5,6,7,8,9};
char s1[10][10]={"","",“abc”,“def”,“ghi”,“jkl”,“mno”,“pqrs”,“tuv”,“wxyz”};//和上一行的哈希对照
int a8=0;//全局变量用来回溯
void kai(int *a2,int start,int len1,char *s5){//a2是输入的数,len1是长度,char s5是记录回溯的
s5[0]代表记录第一个键当前字母
if(start>=len1){//某棵回溯树走到了尽头
int ii;
for(ii=0;ii<a8;ii++){
a[f++]=s5[ii];//赋值
}
a[f++]=’,’;//加逗号
a8–;//!!!!!重要 回退版本 不回退就重复了 比如 应该是 ae 你发现会变成ade
return;
}

int len=3;//手机键盘字母只有4个或者3个 这里进行处理
if(a2[start]==7||a2[start]==9)
len=4;
int i=0;
for(i;i<len;i++){
s5[a8++]=s1[a1[a2[start]]][i];//将某一个键的对应位置的字母放进数组
kai(a2,start+1,len1,s5);//递归

a8=start;//精髓的地方来了,每次结束下层后 a8需要回退到本层 不然就层层叠叠了
}
}
void main(){
int len;
scanf("%d",&len);
int a2[len];
int i;
for(i=0;i<len;i++){
int wqe;
scanf("%d",&wqe);
a2[i]=wqe;
}
char s5[100];

kai(a2,0,len,s5);
puts(a);

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言:电话号码字母排列 的相关文章

随机推荐