// 40、用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列,
// 如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连.
void permutation(int a[],int i,int n,int pre)// 我们保留前一个位置的值
{
if(i==n-1)
{
// 验证是否合格
for(int k=0;k<n;k++)
{
if(k==2&&a[k]==4)
{
cout<<"error"<<endl;
system("pause");
}
if(k+1<n&&(a[k]==3&&a[k+1]==5||a[k]==5&&a[k+1]==3))
{
cout<<"error"<<endl;
system("Pause");
}
}
for(int k=0;k<n;k++)
{
cout<<setw(5)<<a[k];
}
cout<<endl;
// 输出
return;
}
for(int j=i;j<n;j++)
{
swap(a[i],a[j]);
if(i==2&&a[i]==4)
{
swap(a[i],a[j]);
continue;
}
if(a[i]==3)
{
if(i+1<n&&a[i+1]==5||pre==5)
{
swap(a[i],a[j]);
continue;
}
}
if(a[i]==5)
{
if(i+1<n&&a[i+1]==3||pre==3)
{
swap(a[i],a[j]);
continue;
}
}
permutation(a,i+1,n,a[i]);
swap(a[i],a[j]);
}
}