//char陣列儲存答案
//不用其他函式的寫法
優點:執行效率高(應該比前幾篇文章的程式還高,我沒仔細看...
#include <iostream>
#pragma GCC optimize("Ofast","unroll-loops","no-stack-protector")
using namespace std;
char num[8];//存放答案(輸入最大為8)
int n;//輸入的數字
void dfs(const int a,bool fg[]){
if(a==n){//可以選都選完(表示fg[0~n-1]都為true)
puts(num);//輸出並換行(不用迴圈跑)
return;//直接離開避免多跑一次for
}
for(int i=n;i>0;i--){//簡單來講是做二選一(有選=>true;沒選=>false)進入到下個遞迴繼續做同一件事
if(!fg[i-1]){
fg[i-1]=true;
num[a]=(char)(i+'0');//轉char(新增或者是覆蓋原本的資料)
dfs(a+1,fg);
fg[i-1]=false;
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
char c;
bool fg[8]={false};
while(cin>>c){
n=c-'0';//轉int
for(int i=n;i<8;i++){//如果前面的輸入數字比現在大就覆蓋char[]後面的資料為NULL
num[i]=NULL;//避免輸出後面接上筆(最後輸出)的答案
}
dfs(0,fg);
}
return 0;
}