求一段C语言代码:其功能是解决一个数学排列问题,

问题描述:

求一段C语言代码:其功能是解决一个数学排列问题,
求一段C语言代码:用C语言解决下面的这个排列问题,
有七个字母:A,B,C,D,E,F,G.输出满足以下四个条件的排列的个数!
1.A和B必须紧挨在一起;
2.C和F之间必须夹着任意两个字母;
3.G不能排在第一个或者最后一个位置上;
4.D一定要在F和A之间(F和A之间不一定只有D这么一个字母,可以有多个)

代码:

//1.A和B必须紧挨在一起;
bool CheckAB(const char *pszData, int nDataLen)
{
for (int i = 0; i {
if (pszData[i] == 'A')
{
if (i != 0)
{
if (pszData[i-1] == 'B')
{
return true;
}
}
if (i != nDataLen-1)
{
if (pszData[i+1] == 'B')
{
return true;
}
}

return false;
}
}

return false;}
//2.C和F之间必须夹着任意两个字母;
bool CheckCF(const char *pszData, int nDataLen)
{
for (int i = 0; i {
if (pszData[i] == 'C')
{
if (i >= 3)
{
if (pszData[i-3] == 'F')
{
return true;
}
}
if (i = nDataLen)
{
// 检查符合要求并显示
if (Check(pszData, nDataLen))
{
DisplayA_G(pszData);
}
return;
}
for (int i = nDepth; i {
swapData(pszData[nDepth], pszData[i]);
Sort1(pszData, nDataLen, nDepth+1);
swapData(pszData[nDepth], pszData[i]);
}
}

void SortA_G(void)
{
char szData[] = "ABCDEFG";
const int nDataLen = 7;
Sort1(szData, nDataLen);
}

int _tmain(int argc, _TCHAR* argv[])
{
SortA_G();
return 0;
}


输出结果:
0001ABCDGFE
0002ABCGDFE
0003ABDCEGF
0004ABDCGEF
0005ABDFEGC
0006ABDFGEC
0007ABECDGF
0008ABECGDF
0009ABGCEDF
0010ABGCDEF
0011BACDGFE
0012BACGDFE
0013BADCEGF
0014BADCGEF
0015BADFEGC
0016BADFGEC
0017BAECDGF
0018BAECGDF
0019BAGCEDF
0020BAGCDEF
0021CEGFDBA
0022CEGFDAB
0023CGEFDAB
0024CGEFDBA
0025EBACDGF
0026EBACGDF
0027EABCDGF
0028EABCGDF
0029EFDGCBA
0030EFDGCAB
0031EFGDCBA
0032EFGDCAB
0033FDECGAB
0034FDECGBA
0035FDGCEAB
0036FDGCEBA
0037FDGCABE
0038FDGCBAE
0039FEDCGAB
0040FEDCGBA
0041FEGCDAB
0042FEGCDBA
0043FGDCEAB
0044FGDCEBA
0045FGDCABE
0046FGDCBAE
0047FGECDAB
0048FGECDBA
请按任意键继续. . .