這是阿里的最新考題,下面的代碼把所需要的字串列印出來。如有其他的問題可以對下面的代碼進行修改,來提供其他功能。
從題中可以看到,字元的增長呈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]);}}