有个序列数组Seq={a,b,c,d,aa,ba,ca,da,ab,bb,cb,db,ac,bc,cc,dc,ad,......aaa,baa,caa,daa,aba,bba,cba,dba.....

来源:互联网 发布:windows键如何解锁 编辑:程序博客网 时间:2024/05/18 17:05

这是阿里的最新考题,下面的代码把所需要的字符串打印出来。如有其他的问题可以对下面的代码进行修改,来提供其他功能。

从题中可以看到,字符的增长呈4倍变化。意思就是第一次是四个,第二次是16,依次就是64,128,...........................。从上面的而且有一定的规律性

void Seq_String(){char str[1100][10]; //申请一个二位字符数组memset(str,'\0',sizeof(str));int i=0,j=0,k=0,t=1,m=0,w,q=0,p=0,f;  //t用来储存一连串字符的长度,m代表行,n代表列char *temp="abcd";for (i=0;i<strlen(temp);i++){str[m++][k]=temp[i];    //先把“abcd”赋给数组,}k++; //k用来表示列数,也就是一行有几个字符while(1){for (j=0;j<=k;j++){t*=4;    //字符依次随着4的幂增加,t是用来保存需要下一次增加字符串的个数}w=t;  //w用来暂时保存t的值f=m;         //f用来暂时保存当时的行数,for (i=0;i<=k;i++){while (t--)//循环次数,第一次是4,第二次是4*4,依次增长4的倍数{    if (i==0)  //在第一个时候分别赋值为,a,b,c,d{   str[m++][i]=temp[q++];    if (q==4)   {q=0;   }    }else{//str[m++][i]=temp[]strcat(str[m++],str[p]); //前复制前t/4,p的个数随着字符串增加4个而加1.所以,有下面的情况if (t%4==0){p++;}}}t=w;  //再次循环,m=f;}m=w+f; //循环一次后,m是f加上增加的个数。t=1;   //把t变成1,继续进入下次循环if (m>1010){break;}}for (i=0;i<100;i++){printf("%d: %s\n",i,str[i]);}}


 

原创粉丝点击