N个元素的集合中,任选M个元素所构成的排列P(M in N)、组合C(M in N)
题1:0、1、2、3、4、5、6、7、8、9十个数字中,求所有非0开头的6个不重复数字的排列。
法1:很邪恶很强大的循环
1
//M in N, M重循环求所有排列
2
void GetSixNumberSerial1()
3
}
2
3
法2:很邪恶很强大的递归
1
//M in N, 递归求所有排列
2
void GetSixNumberSerial2()
3
}
2
3
题2:0、1、2、3、4、5、6、7、8、9十个数字中,求所有6个不重复数字的组合:
1
void GetSixNumberCombination()
2
}
2
补充问题:
1. 上面问题2的解法中,使用了unsigned int来进行位操作,但在求C(N,M)时,如果N>32,该怎么办呢?(考虑自己实现BitArray)
2. 一个给定的集合有100万个元素,其中每个元素又是由1~1000万之间的100万个不重复数字组成的集合,如果对这些集合进行和并操作,求最少有哪些集合能构成1..1000W这个全集?(06年底,同学的一道baidu面试题,大致意思是这样的)