python编程中的一个排列组合问题。

我在python编程中遇到排列组合一个问题。大概描述如下:
现在有一百个工人,彼此不认识,编号依次为1-100,每天派10个人组成一批出去劳动,假设工人们一同劳动后就各自相互认识了,要求每天派出去劳动的工人都是两两互相不认识的(简而言之就是每个人都没有熟人),请问这样的可以坚持多少天?具体的组合是怎么样?

如果能用python编程解决更好了。大谢!

我感觉你这个跟python就没什么关系,因为就是具体的数学问题了

拿1个人来举例(其实结果所有人都一样)

编号1,可以与2-100个人进行组合。
但每次组合都会损失9个人,不管是随机的还是有顺序的,结果都是一样。
就是说,顶多都只能坚持11天。

你可以使用各种组合,组合都可以不一样,但按你这要求都是只能组合12次。
12次之后就会不符合你的要求了。追问

首先肯定不止12种。例如:你把100个数按每行10个,共10行列出来,可以看成一个10x10的阵列。然后你会发现,每一行(共10行)满足要求,每一列(共10列)满足要求。于是这就有了20个组合。当然还有其他。所以肯定不止12中组合。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-26
99天,每1个人可以分别和其余99人配对。。追问

能给个具体的代码吗?c也行啊。我最终还是要具体的组合方式。

追答

我的O(n^2)算法只能找到69组,选组的技巧没有掌握,所以找不到也验证不出那个110组。
花时间先把数理搞通是关键。。代码算抛砖引玉吧。你有更好的可以也告诉我

代码有“不适合发表的内容”不能贴出,地址
http://hi.baidu.com/imkow/item/7b271acf70e1b3c4984aa080
你看看吧

本回答被提问者采纳
第2个回答  2012-10-27
对算法外行的蹲坑学习。。
第3个回答  2012-10-27
100*99/(10*9)=100追问

恩,你的算法是对的,不过结果错了。100*99/(10*9) = 110。
问下你熟悉编程吗,能不能找到编段代码找出这些组合来。我最终还是想要知道这些组合。谢谢了。

追答

99/9我计算的竟然等于10,汗。
这个结果可以有很多种,但是不管怎么组合,最终结果只有110种,我懂一点python

我的算法很简单,100个人,两两握手(或者说见面)的次数是100*99/2
而10个人两两握手的次数是10*9/2,所以用100*99/(10*9)的数字就是最大的天数。
这个结果也许不对,但是绝不可能比这个天数更多。
这其中有个问题,比如100个人每次抽9个人出去干活,按照这个算法是不能整除的,100*99/(9*8)不能整除,最大的天数就是结果的整数部分。
上述结果是我猜的,未经验证。

追问

你能不能把你的思路通过代码实现呢。我最终还是想知道最终的组合方式。我也觉得可能会有很多个110个组合方案。

我验证过9个人每天派出去3人,和16个人每天派出去4个人的情况。你这种计算方法得出的结果和我枚举出的结果是一致的。

追答

我也是初学,我试下,但不能保证给出答案。

相似回答