用1,2,3,4,5,6组成六位数(没有重复数字),要求任何相邻的两个数字的奇偶性不同,且1和2不相邻
数学方法:
当 1 在 两端时 , 2 可放 2个位置 , 35全排列 , 46全排列 ;
故 有 2 * 2 * 2! * 2! = 16 种;
当 1 在 中间时 , 2 可放 1个位置 , 35全排列 , 46全排列 ;
故 有 4 * 1 * 2! * 2! = 16 种;
总情况为 16 + 16 = 32 种.
C++程序为:
#include <iostream>
using namespace std;
void Exch2Data(char& item1,char& item2)
{
char tmp = item1;
item1 = item2;
item2 = tmp;
}
void Permutation(char* str,int l,int r)
{
if(l==r)
{
int t = 0;
for (int i = 0; i < r ; i++)
{
if ((str[i + 1] - str[i]) % 2 == 0 || (str[i + 1] + str[i]) == ('1' + '2'))
{
t = 1;
break;
}
}
if ( t == 0)
{
for (int i = 0; i <= r ; i++)
{
cout << str[i];
}
cout << "\t";
}
}
else
{
for(int i=l;i<=r;++i)
{
Exch2Data(str[l],str[i]);
Permutation(str,l+1,r);
Exch2Data(str[i],str[l]);
}
}
}
int main()
{
char str[]="123456";
Permutation(str,0,5);
cout << endl;
}
运行结果为:
第二部4 6 插空排2*A22种
第三步:把1 2 放到3 5 4 6 中有c52*a22种
共有32种
2013-11-07
12相邻
如果是12奇偶奇偶
则就是35和46分别全排列
有A22*A22=4个
如果是奇21偶奇偶
也是35和46分别全排列
则1和2还可以在第34,45,56位
所以又5×4=20个
如果是偶奇偶奇偶奇
也是20个
所以是20×2=40个