排列,一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列(permutation)。特别地,当m=n时,这个排列被称作全排列(all permutation)。
组合(combination)是一个数学名词。一般地,从n个不同的元素中,任取m(m≤n)个元素为一组,叫作从n个不同元素中取出m个元素的一个组合。我们把有关求组合的个数的问题叫作组合问题。
Arrangement
std::stack<int> g_Array;
//A(m, n)n个数中选择m个进行排列,n = high - low, m = number
void arrangement(int *array, int low, int high, int number)
{ //array,目标序列。low,目标序列下限,high,目标序列上限,number,选择的数量
if (g_Array.size() == number)
{
std::stack<int> t_Array = g_Array;
while (t_Array.empty() == false)
{
std::cout << t_Array.top() << " ";
t_Array.pop();
}
std::cout << std::endl;
}
else
{
for (int i = low; i < high; i++)
{
g_Array.push(array[i]);
arrangement(array, i + 1, high, number);
g_Array.pop();
}
}
}
combination
//组合数
int combination(int n, int m)
{
if(m == 0 || m == n)
return 1;
else
{
return combination(n - 1, m) + combination(n - 1, m - 1);
}
}