题解 P1706 【全排列问题】
本题解绝非正解,仅适用于初学者,没有涉及DFS及其他高端技术,会枚举就能看懂。求大佬勿喷。
咱是个蒟蒻,咱不会DFS,也不会高端做法,打表费时,所以,暴力枚举出奇迹!(逃)
其实就是枚举所有数字,反正就1-9,范围小,打表也可以,但表会分行,这时候要么在表里行前行尾加“”然后用printf("...""..."......)输出,要么用C11里的raw string literals,cout<<R"..."输出。咱都用不熟咋治?
枚举呗
枚举思想很简单,n最大是9,那就用9个for循环分别枚举,从1-n,只输出1-n的全排序,那就每个循环后面加个判断语句,看是否到第n个数了,到了的话直接输出。
下面是代码,代码很长,但很好打,各部分都差不多,写的时候复制一部分黏贴,在后面加一段就行
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[10];
for(int i=1;i<=9;i++) a[i]=i;
int n;
cin>>n;
for(int i1=1;i1<=n;i1++)//把第一个数从1-n枚举
{
if(n==1)//如果n是1,即从1-1全排序
{
cout<<" "<<i1<<"\n" //输出全排序结果
continue;//跳过后面几个数的枚举
}
for(int i2=1;i2<=n;i2++)//把第二个数从1-n枚举 ,后面嵌套的for循环同理,即把第3、4、5...9个数枚举
{
if(i2==i1) continue;//当i2和前面的数重复时,跳过后面的判断,继续循环。后面嵌套的循环同理,即当i3、i4、i5、......i9和前面数重复时,跳过后面的判断,继续循环
if(n==2)//如果n是2 ,即从1-2全排序。后面同理,即从1-3、1-4......1-9全排序
{
cout<<" "<<i1<<" "<<i2<<"\n";//输出全排序结果,后面同理
continue;//跳过后面几个数的枚举,后面同理
}
for(int i3=1;i3<=n;i3++)
{
if(i3==i2||i3==i1) continue;
if(n==3)
{
cout<<" "<<i1<<" "<<i2<<" "<<i3<<"\n";
continue;
}
for(int i4=1;i4<=n;i4++)
{
if(i4==i3||i4==i2||i4==i1) continue;
if(n==4)
{
cout<<" "<<i1<<" "<<i2<<" "<<i3<<" "<<i4<<"\n";
continue;
}
for(int i5=1;i5<=n;i5++)
{
if(i5==i4||i5==i3||i5==i2||i5==i1) continue;
if(n==5)
{
cout<<" "<<i1<<" "<<i2<<" "<<i3<<" "<<i4<<" "<<i5<<"\n";
continue;
}
for(int i6=1;i6<=n;i6++)
{
if(i6==i5||i6==i4||i6==i3||i6==i2||i6==i1) continue;
if(n==6)
{
cout<<" "<<i1<<" "<<i2<<" "<<i3<<" "<<i4<<" "<<i5<<" "<<i6<<"\n";
continue;
}
for(int i7=1;i7<=n;i7++)
{
if(i7==i6||i7==i5||i7==i4||i7==i3||i7==i2||i7==i1) continue;
if(n==7)
{
cout<<" "<<i1<<" "<<i2<<" "<<i3<<" "<<i4<<" "<<i5<<" "<<i6<<" "<<i7<<"\n";
continue;
}
for(int i8=1;i8<=n;i8++)
{
if(i8==i7||i8==i6||i8==i5||i8==i4||i8==i3||i8==i2||i8==i1) continue;
if(n==8)
{
cout<<" "<<i1<<" "<<i2<<" "<<i3<<" "<<i4<<" "<<i5<<" "<<i6<<" "<<i7<<" "<<i8<<"\n";
continue;
}
for(int i9=n;i9<=n;i9++)
{
if(i9==i8||i9==i7||i9==i6||i9==i5||i9==i4||i9==i3||i9==i2||i9==i1) continue;
cout<<" "<<i1<<" "<<i2<<" "<<i3<<" "<<i4<<" "<<i5<<" "<<i6<<" "<<i7<<" "<<i8<<" "<<i9<<"\n";
}
}
}
}
}
}
}
}
}
return 0;
}