输入n个数值,输出由这n个数构成的排列,不允许出现重复的项
输入
3
1 1 2
输出
1 1 2
1 2 1
2 1 1
代码
#include<cstdio> #include<cstring> using namespace std; const int maxn = 100; int rcd[maxn],num[maxn],vis[maxn]; int n,m; int read_input() { if(scanf("%d",&n)==EOF) return 0; m=0; memset(vis,0,sizeof(vis)); int i,j; for( i=0;i<n;i++){ int val; scanf("%d",&val); for( j=0;j<m;j++) if(num[j]==val){ vis[j]++; break; } if(j==m){ num[j]=val; vis[m++]++; } } return 1; } void unrepeat(int l){ if(l==n){ for(int i=0;i<n;i++){ printf("%d",rcd[i]); if(i<n-1) printf(" "); } printf("\n"); return ; } for(int i=0;i<m;i++) if(vis[i]>0){ vis[i]--; rcd[l]=num[i]; unrepeat(l+1); vis[i]++; } } int main(){ while(read_input()) unrepeat(0); return 0; }
利用STL
#include<cstdio> #include<algorithm> using namespace std; const int MAXN = 1000 ; int num[MAXN]; int n; int input() { if(scanf("%d",&n)!=1) return 0; for(int i=0;i<n;i++) scanf("%d",&num[i]); return 1; } int main() { while(input()) { sort(num,num+n); do { for(int i=0;i<n;i++) printf("%d ",num[i]); printf("\n"); } while(next_permutation(num,num+n)); } return 0; }
时间: 2024-10-11 06:07:01