打印双色球所有排列组合的个数,结果与理论计算不一致?
算法是我的弱项呵呵,偶尔想研究一下:双色球的排列组合个数应该是:
((33 * 32 * 31 * 30 * 29 * 28) / (2 * 3 * 4 * 5 * 6)) * 16 = 17721088
而我想写程序穷尽一下所有的组合 结果却是:230153616 整整多出了13倍!!!!!! 不知道我哪里有重复的? 该怎么修改?(双色球规矩:6个 红球号码: 1-33不管顺序 + 一个篮球号码 1-16 )
代码如下:
static void Main(string[] args) { int length = ((33 * 32 * 31 * 30 * 29 * 28) / (2 * 3 * 4 * 5 * 6)) * 16; Console.WriteLine(length); byte[] byteData = new byte[12 * 100]; int id = 0; for (int r1 = 1; r1 <= 33; r1++) { for (int r2 = 1; r2 <= 33; r2++) { for (int r3 = r2; r3 <= 33; r3++) { for (int r4 = r3; r4 <= 33; r4++) { for (int r5 = r4; r5 <= 33; r5++) { for (int r6 = r5; r6 <= 33; r6++) { for (int bl = 1; bl <= 16; bl++) { id++; //if ((id % 100000) == 0) //{ // Console.WriteLine(" {0} ", ((int)id)/100000); //} } } } } } } } Console.WriteLine("OVER! id = {0} length = {1}", id, length); Console.ReadKey(); }