设计算法从前m个大写字母(m≤26)种取出n个字母的所有排列(组合)(排列数)
#include<iostream>
using namespace std;
char *a;
bool check(int i)
{
for(int j = 0;j < i;j++)
{
if(a[i] == a[j])//相同
{
return false;
}
}
return true;
}
void output(char *a,int n)
{
for(int i = 0;i < n;i++)
{
cout<<a[i] <<” “;
}
cout<<endl;
}
//递归回溯法
void backTrack(int i,int n,int m)
{
if(i >= m)
{
output(a,m);
}
else
{
for(int j = 0;j < n;j++)
{
a[i] = ‘A’ + j;
if(check(i))
{
backTrack(i + 1,n,m);
}
}
}
}
int main()
{
int n,m;
cout<<“请输入前n个数:”<<endl;
cin>>n;
cout<<“请输入n个数中的m个数排序:”<<endl;
cin>>m;
a = new char[n];
backTrack(0,n,m);
return 0;
}