题目:给定1-n数字,排列组合。

解法:递归。第一个数字有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++排列组合的更多相关文章

  1. cb47a_c++_STL_算法_排列组合next_prev_permutation

    cb47a_c++_STL_算法_排列组合next_prev_permutation 使用前必须先排序.必须是 1,2,3或者3,2,1.否者结果不准确.如果, 1,2,4,6.这样数据不会准确nex ...

  2. C#的排列组合类

    C#的排列组合类 //-----------------------------------------------------------------------------//// 算法:排列组合 ...

  3. C#排列组合类

    //----------------------------------------------------------------------------- // // 算法:排列组合类 // // ...

  4. 【AtCoder】AGC005 F - Many Easy Problems 排列组合+NTT

    [题目]F - Many Easy Problems [题意]给定n个点的树,定义S为大小为k的点集,则f(S)为最小的包含点集S的连通块大小,求k=1~n时的所有点集f(S)的和取模92484403 ...

  5. 【CodeForces】889 C. Maximum Element 排列组合+动态规划

    [题目]C. Maximum Element [题意]给定n和k,定义一个排列是好的当且仅当存在一个位置i,满足对于所有的j=[1,i-1]&&[i+1,i+k]有a[i]>a[ ...

  6. 排列组合算法(PHP)

    用php实现的排列组合算法.使用递归算法,效率低,胜在简单易懂.可对付元素不多的情况. //从$input数组中取$m个数的组合算法 function comb($input, $m) { if($m ...

  7. C#语法灵活运用之排列组合算法

    今天群里有朋友求一个排列组合算法,题目是给定长度,输出所有指定字母的组合. 如指定字母a.b.c.d.e.f,长度为2,则结果应为:aa.ab.ac ... ef.ff. 有朋友给出算法,很有特色: ...

  8. N个数组中所有元素的排列组合(笛卡尔积)算法

    (1)N个数组对象中所有元素排列组合算法 private List<List<Object>> combineAlg(List<Object[]> nArray) ...

  9. python算法-排列组合

    排列组合 一.递归 1.自己调用自己 2.找到一个退出的条件 二.全排列:针对给定的一组数据,给出包含所有数据的排列的组合 1:1 1,2:[[1,2],[2,1]] 1,2,3:[[1,2,3],[ ...

  10. HDU5145:5145 ( NPY and girls ) (莫队算法+排列组合+逆元)

    传送门 题意 给出n个数,m次访问,每次询问[L,R]的数有多少种排列 分析 \(n,m<=30000\),我们采用莫队算法,关键在于区间如何\(O(1)\)转移,由排列组合知识得到,如果加入一 ...

随机推荐

  1. 函数变量作用域(python)

    收集参数:该参数个数不确定 >>> def test(*params): print('参数的长度是:', len(params)); print('第二个参数是:', params ...

  2. 浅析人脸检测之Haar分类器方法

    一.Haar分类器的前世今生 人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的研究方向发 ...

  3. 《FPGA全程进阶---实战演练》第二十一章 电源常用类型:LDO和 DCDC

    高速电路中的电源设计 高速电路中的电源设计大概分为两种,一种是集总式架构,一种是分布式架构.集总式架构就是由一个电源输入,然后生成多种所需要的电压.如图1所示.这种架构会增加多个DC/DC模块,这样成 ...

  4. Xcode去除某种类型的警告

      首先来看下当有警告时,怎么找到警告类型,在某条警告上,右键—>Reveal in Log     下面 [ ] 中间就是警告信息     去除警告信息的几种方式:   一.使用编译器提供的宏 ...

  5. linux取某个字段排重

    排重统计 cat a.txt | awk -F ';' '{print $2}' | sort -u | wc -l

  6. vsftp.conf

    anonymous_enable=NO local_enable=YES write_enable=YES dirmessage_enable=YES xferlog_enable=YES xferl ...

  7. telnet localhost 8089 ==》》命令使用

    GET /ccc/abc.html HTTP/1.1 host:localhost     客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式, HTTP协议用于定 ...

  8. .NET的三种缓存(页面缓存,控件缓存,自定义缓存)

    BLL.Area bll = new BLL.Area(); protected void Page_Load(object sender, EventArgs e) { if (Cache[&quo ...

  9. PowerDesigner之PDM检查

    一.PDM检查 1.检查项的设置 PDM错误级别分为Error和Warning两种.Error是致命错,一旦发现这类错误,系统会自动CDM生成PDM或者OOM,Warning是警告错误,是系统认为不合 ...

  10. 【缓存】EF4ProviderWrappers

    在Kooboo中使用了Entity Framework作为持久化框架,但由于EF1.0并没有提供完整缓存解决方案,一直以来都在为数据缓存而烦脑,在没有找到合适解决方案的情况下,采取了临时的解决办法:直 ...