#include<bits/stdc++.h> using namespace std; int r[10000]; int u; void dg(int list[],int k,int m){ if(k==m){ int num = 0; int t = 1; for(int i=m;i>=0;i--){ num = num + list[i] * t; t = t * 10; } r[u] = num; u++; } else{ for(int i=k;i<=m;i++){ // 从固定的数后第一次进行交换 swap(list[k],list[i]); //k+1:缩小数组长度 dg(list,k+1,m); //一组递归完以后交换回来 swap(list[k],list[i]); } } } int main(){ int n,i; cin>>n; int a[20]; for(i = 0;i < n;i++){ a[i] = i + 1; } dg(a,0,n - 1); sort(r,r + u); int t[20],x,j,k; for(i = 0;i < u;i++){ x = r[i]; k = 0; while(x != 0){ t[k] = x % 10; k++; x = x / 10; } for(j = k - 1;j >= 0;j--){ cout<<t[j]<<" "; } cout<<endl; } } /************************************************************** Problem: 1308 User: admin Language: C++ Result: Accepted Time:45 ms Memory:2116 kb ****************************************************************/