设R={ r1, r2, ……, rn }是要进行排列的n个元素,其中元素r1 ,r2 ,……,rn可能相同。设计一个算法,列出R的所有不同排列。
编程任务键盘输入元素个数n以及待排列的n个元素,输出这n个元素的所有不同排列、以及排列总数。
实验代码C++版
#include运行结果using namespace std; static int i = 0; int whetherChange(char list[], int k, int i); void Perm(char list[], int k, int m); int main() { int n; cout << "请输入元素个数:"; cin >> n; char* list = new char[n]; cout << "请输入元素,使用空格分隔开" << endl; for (int i = 0; i < n; i++) { cin >> list[i]; } cout << "所有不同的排列为:" << endl; Perm(list, 0, n - 1); cout << "排列总数为:" << i << endl; delete[] list; return 0; } int whetherChange(char list[], int k, int i) { if (i > k) { for (int j = k; j < i; j++) { if (list[j] == list[i]) return 0; } } return 1; } void Perm(char list[], int k, int m) { if (k == m) { for (int i = 0; i <= m; i++) cout << list[i]; cout << endl; i++; } else { for (int i = k; i <= m; i++) { if (whetherChange(list, k, i)) { swap(list[k], list[i]); Perm(list, k + 1, m); swap(list[i], list[k]); } } } }
暑期编程PK赛 得CSDN机械键盘等精美礼品!



