有个序列数组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.....

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

从题中可以看到,字符的增长呈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]);
	}
				
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值