算法:C++排列组合
2014-11-26 20:16
405 查看
题目:给定1-n数字,排列组合。
解法:递归。第一个数字有n种选择,第二个数字有n-1种选择,依次递归排列输出。用数组表示n个数字,用过的数字置0。
实现语言:C++
输出:
文/yanxin8原创,获取更多信息请访问http://yanxin8.com/261.html
解法:递归。第一个数字有n种选择,第二个数字有n-1种选择,依次递归排列输出。用数组表示n个数字,用过的数字置0。
实现语言:C++
#include <iostream> using namespace std; /************************************************************************/ /* num : 需要排列的数组 count : 数组总数 numC: 已经排列的数组 iUse:已经排列的个数 iNull:置0的个数 sum: 总排列数 */ /************************************************************************/ template <class T> void ComBineNum(T *num, const int count, T *numC, int iUse, int* sum) { int iNull = 0; T *newNum = new T[count]; for (int i = 0; i < count; ++i){ memcpy(newNum, num, count); if (newNum[i] == 0){ ++iNull; if (iNull == count){ for (int i = 0; i < count; ++i){ cout << numC[i]; } cout << endl; ++(*sum); return; } continue; } numC[count - iUse] = newNum[i]; newNum[i] = 0; ComBineNum(newNum, count, numC, iUse - 1, sum); } delete[] newNum; } int main() { int sum = 0; const int count = 4; char num[count], pNum[count]; for (int i = 0; i < count; ++i){ num[i] = i + '1'; } ComBineNum<char>(num, count, pNum, count, &sum); cout << "sum :" << sum << endl; sum = 1; for (int i = 1; i <= count; ++i){ sum *= i; } cout << "sum :" << sum << endl; return 0; }
输出:
template <class T> void Swap(T& a, T& b) { T c = a; a = b; b = c; } template <class T> void Perm(T list[], int k, int m, int* count) { if (k == m){ for (int i = 0; i < m; ++ i){ cout << list[i]; } cout << endl; ++(*count); } else{ for (int i = k; i < m; ++i){ Swap(list[k], list[i]); Perm(list, k + 1, m, count); Swap(list[i], list[k]); } } } int main() { const int m = 4; int count = 0; int list[m]; for (int i = 0; i < m; ++i){ list[i] = i + 1; } Perm(list, 0, m, &count); cout << count; return 0; }
文/yanxin8原创,获取更多信息请访问http://yanxin8.com/261.html
相关文章推荐
- C++和java中关于全排列和组合的有关算法
- C++15道基础算法题---(2)排列组合
- [互联网面试笔试汇总C/C++-11] 字符串全排列和组合算法
- 排列组合算法之一: 01转换法_java改变后的c++版
- 排列组合算法之二: 01转换法_java改变后的c++改进版
- 有人机交互能力的排列组合算法(C++版)
- 排列组合算法总结(基于C++实现)
- 有人机交互能力的排列组合算法(C++版)
- 排列组合算法1:生成全部有序列b
- 排列、组合及算法
- 排列组合算法
- 一个排列组合算法---裂变算法
- 全排列生成算法与组合数排列求法
- 求N选M的组合和求全排列的巧妙算法
- 一个排列组合算法---裂变算法
- 全排列算法汇总(C++版)
- C/C++面试之算法系列--如何利用数学思想解1/2/5组合问题
- 高效率的排列组合算法
- 排列组合与回溯算法
- 求N选M的组合和求全排列的巧妙算法 - 算法艺术 - Hello, busycai!