首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

打印双色球全部排列组合的个数,结果与理论计算不一致

2012-08-10 
打印双色球所有排列组合的个数,结果与理论计算不一致?算法是我的弱项呵呵,偶尔想研究一下:双色球的排列组

打印双色球所有排列组合的个数,结果与理论计算不一致?
算法是我的弱项呵呵,偶尔想研究一下:双色球的排列组合个数应该是:
((33 * 32 * 31 * 30 * 29 * 28) / (2 * 3 * 4 * 5 * 6)) * 16 = 17721088

而我想写程序穷尽一下所有的组合 结果却是:230153616 整整多出了13倍!!!!!! 不知道我哪里有重复的? 该怎么修改?(双色球规矩:6个 红球号码: 1-33不管顺序 + 一个篮球号码 1-16 )
代码如下:

C# code
        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();        }


[解决办法]
for循环的起始条件应该是r2=r1+1,r3=r2+1....,否则r[k+1]和r[k]就重复了

热点排行