求一段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这么一个字母,可以有多个)

问题描述:

求一段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;
}


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