这是阿里的最新考题,下面的代码把所需要的字符串打印出来。如有其他的问题可以对下面的代码进行修改,来提供其他功能。
从题中可以看到,字符的增长呈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]);
}
}