19本书,选5本,任两本不邻-粗解

来源:互联网 发布:什么是java技术 编辑:程序博客网 时间:2024/04/30 17:04

 

有19本书,分别编号为1--19,从中选出5本,要求任意两本编号不相邻,问一共有多少中选法?

A. 2002 B. 3003 C. 11628 D. 360360

任选5本,组合C19(5)=19*18*17*16*15/5!=11628。又有条件规定任意两本编号不相邻,那一定选A或者B,由于是个选择题不必细究,那就可以选中间值B-3003。这是考场上的解决办法,要想一探究竟参考如下。

19本书就是有19个位置,我们可以写个19位的二进制数,1表示该位置的书选择了,0表示该位置的书没有选择。那么,任意两本不相邻,那我们可以写出5个1,相邻两个1之间放0,即101010101。如下图:

我们可以看出有6个等效位置,即10个0可以放在这六个位置,来产生不同的二进制数,使1出现的位置发生变化,对应选择不同位置的书本。

设每个位置分别放x1,x2,x3,x4,x5,x6个0,不同的组合(x1,x2,x3,x4,x5,x6)对应不同的选择。

x1+x2+x3+x4+x5+x6=10,化为线性规划了,你呢可以逐一演算来推出有多少解。我没有做演算,就写了个程序来验证了下答案。程序如下:

 

最后的count应为解个数,即选择的个数。运行程序结构为3003。想的不对的地方,望指正!