组合:
#include "stdafx.h" #include<iostream> using namespace std; void print(int n,int *A,int cur,int *B) { if(cur==n) { for(int i=0;i<cur;i++) { if(B[i]) { printf("%d",A[i]); } } printf("\n"); return; } B[cur]=1; print(n,A,cur+1,B); B[cur]=0; print(n,A,cur+1,B); } int main() { int n,A[10],B[10]; while(cin>>n) { memset(B,0,10); for(int i=0;i<n;i++) cin>>A[i]; print(n,A,0,B); } return 0; }
全排列:
#include<iostream> using namespace std; void print(int n,int *A,int cur) { if(cur==n) { for(int i=0;i<cur;i++) { printf("%d",A[i]); } printf("\n"); return; } else { for(int i=cur;i<n;i++) { swap(A[i],A[cur]); print(n,A,cur+1); swap(A[i],A[cur]); } } } int main() { int n,A[10],B[10]; while(cin>>n) { memset(B,0,10); for(int i=0;i<n;i++) cin>>A[i]; print(n,A,0); } return 0; }