1.原序列P,结果序列A,。从P中挑选A中没有出现过的元素加入。递归
2.若P中出现重复的,先对P进行排序。统计P中某元素的个数,统计A中某元素的个数。后一个不与前一个相同。
1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 using namespace std; 5 int A[100] = { 0 }; 6 vector<int> P = { 4,3,6,7,3 }; 7 void print(int n,vector<int> P,int *A, int cur) 8 { 9 if (cur == n) 10 { 11 for (int i = 0; i <= cur - 1; ++i) 12 { 13 cout << A[i] << " "; 14 } 15 cout << endl; 16 } 17 else 18 { 19 for (int i = 0; i <= n-1; ++i) 20 { 21 if (i == 0 || P[i] != P[i - 1]) 22 { 23 int c1 = 0; 24 int c2 = 0; 25 for (int j = 0; j <= n - 1; ++j) //统计P中个数 26 { 27 if (P[j] == P[i]) 28 c1++; 29 } 30 for (int j = 0; j <= cur - 1; ++j) //统计A中个数 31 { 32 if (P[i] == A[j]) 33 c2++; 34 } 35 if (c1 > c2) 36 { 37 A[cur] = P[i]; 38 print(n, P, A, cur + 1); 39 } 40 } 41 } 42 } 43 } 44 int main(void) 45 { 46 sort(P.begin(), P.end()); 47 int n = P.size(); 48 print(n, P,A, 0); 49 return 0; 50 }