先看最简单的一种:
void perm2(int *arr, int n, int len){ for (int i = 0; i < len; i++) { for (int j = 0; j < len; j++) { for (int k = 0; k < len; k++) { if ((i != k) && (i != j) && (j != k)) { cout << << arr[k]<
另一种:递归,用一个数组标记数字是否被用过
#includeusing namespace std;#define N 3int used[N] = { 0 };//标记int num[N];//结果int mat[N] = { 1, 2, 3};//原来的数据void shown(int ceng){ if (ceng >= N) { for (int i = 0; i < N; i++) { printf("%4d", num[i]); } printf("\n");//显示数据 } else { for (int i = 0; i < N; i++) { if (!used[i]) { used[i] = 1;//代表用过 num[ceng] = mat[i];//写入结果 shown(ceng + 1); used[i] = 0;//用完了 } } }}int main(){ shown(0); cout << coun << endl; system("pause"); return 0;}
1.先将当前字符串打印出来
2.将倒数第二个字符后移 3.将字符串打印出来 4.倒数第三个字符调用上过程 5.第一个字符调用以上过程#includeusing namespace std;void perm1(int *arr, int n,int len){ if (n ==len) { for (int i = 0; i < len; i++) { cout << arr[i] << " "; } cout << endl; } else { for (int pInt = n; pInt < len; pInt++) { swap(arr[n], arr[pInt]); perm1(arr, n + 1, len); swap(arr[n], arr[pInt]); } }}int main(){ int arr[] = { 1, 2, 3}; int len = sizeof(arr) / sizeof(arr[0]); perm2(arr,0,len); cout << coun << endl; system("pause");}