解决方案 »

  1.   

    这是一个组合的算法,一个数组存放1~33 Arr[33],然后根据Arr每次去取6个数每次取的都不同就行了。
      

  2.   

    把数组传进去,然后使用递归把他一个个组合,设置哨兵进行中间比较和替换,大概是这样子,没时间Code,嘿嘿。
      

  3.   

    SQL CROSS JOIN,不过会有重复,只是排位不一样
      

  4.   

    谁傻了才帮你做,33的6次方,我吃多了才把自己的机子当微波炉用呢一句话,cross join看懂了自己把自己的机子整瘫把
      

  5.   

    我劝你还是别想了,我算了一下红蓝球两个加起来买中奖的概率为1.7千万分之一,所以中奖的都是你的运气刚好碰上了这个1.7千万分之一的点,哈哈。
    不要打击我或许你就是那个幸运儿也说不定,中头奖了别忘了我哈,不给我Money给我送分也行。哈哈
      

  6.   

    这个应该很简单的吧,而且必然要穷举的。
    int i1,i2,i3,i4,i5,i6;
    for(a=1,a<34-5;a++)
    {
      i1=a;
      for(int b=a+1;b<34-4;b++)
      {
        i2=b;
        for(int c=b+1;c<34-3;c++)
        {
          i3=c;
          for(...)
          {
            ......
            //最后一个(第六个)for循环中输出i1-i6的值并换行即可。
          }
        }
      }
    }
      

  7.   

    static void Main(string[] args)
            {
                int i1,i2,i3,i4,i5,i6;
                int i = 0;
                for (int a = 1; a < 34 - 5; a++)
                {
                    i1 = a;
                    for (int b = a + 1; b < 34 - 4; b++)
                    {
                        i2 = b;
                        for (int c = b + 1; c < 34 - 3; c++)
                        {
                            i3 = c;
                            for (int d = c + 1; d < 34 - 2;d++ )
                            {
                                i4 = d;
                                for (int e = d + 1; e < 34 - 1; e++)
                                {
                                    i5 = e;
                                    for (int f = e + 1; f < 34; f++)
                                    {
                                        i6 = f;
                                        //Console.WriteLine(......);
                                        i++;
                                    }
                                }
                            }
                        }
                    }
                }
                Console.WriteLine(i.ToString());
            }
    最后结果是 1107568
    我的机器运算用了不到半秒。
      

  8.   

    Guid.NewGuid().GetHashCode()%33//这个生成算法绝对nx
      

  9.   


    你都嵌套了6个循环一般建议超过不3个的

    确实,如果超过三个,运算量大,而且代码结构易乱。
    但是也得具体问题具体看嘛,这就是个小算法而已,又不是项目工程代码,何必死板硬套!
    这里循环虽然是6个,但是方法很清晰,代码结构并不乱,运算效率也不低吧。
    况且楼主要求是要输出所有组合的吧,你能避免循环?
    要是直接排列组合问有多少种,那直接(33X32X31X30X29X28)/(6X5X4X3X2X1)=1107586了。
    这东西你还想办法写成递归么?你还去考虑退出条件?去考虑剪枝?
    或许你有更高效率的方法?贴上来看看?
      

  10.   


    using System;
    using System.Collections.Generic;namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                int i, j, k, l, m, n;
                List<int> list = new List<int>();
                for (i = 1; i < 34; i++)
                {
                    for (j = 1; j < 34; j++)
                    {
                        for (k = 1; k < 34; k++)
                        {
                            for (l = 1; l < 34; l++)
                            {
                                for (m = 1; m < 34; m++)
                                {
                                    for (n = 1; n < 34; n++)
                                    {
                                        if (i != j && i != k && i != l && i != m && i != n && j != k && j != l && j != m && j != n && l != m && l != n && m != n)
                                        {
                                            Console.WriteLine(i.ToString() + j.ToString() + k.ToString() + l.ToString() + m.ToString() + n.ToString());
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                Console.ReadLine();
            }
        }
    }
      

  11.   


    using System;
    using System.Collections.Generic;namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                int i, j, k, l, m, n;
                int s = 0;
                DateTime dt1 = DateTime.Now;
                List<int> list = new List<int>();
                for (i = 1; i < 34; i++)
                {
                    for (j = 1; j < 34; j++)
                    {
                        for (k = 1; k < 34; k++)
                        {
                            for (l = 1; l < 34; l++)
                            {
                                for (m = 1; m < 34; m++)
                                {
                                    for (n = 1; n < 34; n++)
                                    {
                                        if (i != j && i != k && i != l && i != m && i != n && j != k && j != l && j != m && j != n && l != m && l != n && m != n)
                                        {
                                            //Console.WriteLine(i.ToString() + j.ToString() + k.ToString() + l.ToString() + m.ToString() + n.ToString());
                                            s++;
                                           
                                        }
                                    }
                                }
                            }
                        }
                    }
                } 
                Console.WriteLine("共有:"+s.ToString()+"组数;");
                DateTime dt2 = DateTime.Now;
                int dt = (dt2 - dt1).Seconds;
                Console.WriteLine("用时:"+dt.ToString()+"秒;");
                Console.ReadLine();
            }
        }
    }共有:882889920组数;
    用时16秒;