全新整理:微軟、谷歌、百度等公司經典面試100題
40、用1、2、2、3、4、5這六個數字,寫一個main函數,打印出所有不同的排列,
如:512234、412345等,要求:"4"不能在第三位,"3"與"5"不能相連.
int nCnt = 0;
void PrintIA(int * r)
{
if(r[3]==4) return;
int j = 0;
while(r[j]!=3)j++;
if(j==0 && r[1]==5)
return;
else if(j==5 && r[4]==5)
return;
else if(r[j-1]==5 || r[j+1]==5)
return;
for(int i=0;i<6;i++)
printf("%d", r[i]);
printf("/n");
nCnt++;
}
void arrage(int *p, bool *q, int *r, int s)
{
for(int i=0;i<6;i++)
{
if(q[i]) continue;
r[s++] = p[i];
if(s==6)
{
PrintIA(r);
return;
}
q[i] = true;
arrage(p, q, r, s);
q[i] = false;
s--;
if(i==1)i++;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int p[6] = {1,2,2,3,4,5};
bool q[6] = {0};
int r[6] = {0};
arrage(p, q, r, 0);
printf("%d/n", nCnt);
return 0;
}