您的位置:首页 > 编程语言 > C语言/C++

C++12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?

2015-05-02 12:53 603 查看
#include <iostream>
#define DefaultSize 9
//问题描述:
//12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
using namespace std;
class Grial
{
public:
Grial(int sz=DefaultSize)
{
visted = new bool [sz];
data = new int [sz];
size = sz;
for(int i=1;i<=sz;i++)
{
visted[i]=0;
}
}
bool check(int a[])
{
if(
(a[1]<a[2]&&a[2]<a[3]&&a[3]<a[4]&&a[4]<a[5]&&a[5]<a[6]&&
a[1]>a[7]&&a[2]>a[8]&&a[3]>a[9]&&a[4]>a[10]&&a[5]>a[11]&&a[6]>a[12]&&
a[7]<a[8]&&a[8]<a[9]&&a[9]<a[10]&&a[10]<a[11]&&a[11]<a[12]
)
)
return true;
return false;
}
void Insert(int start)
{
if(start==size+1)
{
int k = 0;
if(check(data))
{
for(int i=1;i<=size;i++)
{
cout<<data[i]<<"    ";
k++;
if(k%6==0)cout<<endl;
}
cout<<"\033[35m-------------------------------------------------\033[0m"<<endl;
}
return ;
}
else
{
for(int i=1;i<=size;i++)
{
if(visted[i]==0)
{
data[start]=i;
visted[i]=1;
Insert(start+1);
visted[i]=0;
}
}
}
}
private:
int size;
bool *visted;
int *data;
};
int main()
{
Grial g(12);
g.Insert(1);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐