int[] a={1,2,3,4,5}
for(int i1=0;i1<a.count;i1++)
{
  for(int i2=i1+1;i2<a.count-1;i2++)
  {
    for(int i3=i2+1;i3<a.count-2;i3++)
    {
       console.write(a[i1]*100+a[i2]*10+a[i3]);
    }
  }
}

解决方案 »

  1.   

    大一的时候学PASCAL,里面的八皇后问题,和这个很像
      

  2.   


    int[] a={1,2,3,4,5}
    for(int i1=0;i1 <a.count;i1++)
    {
      for(int i2=i1+1;i2 <a.count-1;i2++)
      {
        for(int i3=i2+1;i3 <a.count-2;i3++)
        {
          console.write(a[i1]*100+a[i2]*10+a[i3]);
        }
      }
    }
      

  3.   

    刚给你写了个 测试了下好用~static void Main()
            {
                int[] a = new int[]{ 1,2,3,4,5};
                List<int> t = GetArray(a);
                foreach (int i in t)
                {
                    Console.Write(i.ToString());
                    Console.Write(" ");
                }
                Console.ReadLine();
            }        public static List<int> GetArray(int[] a)
            {
                int length = a.Length;
                int x, y, z = 0;
                List<int> list = new List<int>();
                for (int j = 0; j < length; j++)
                {
                   for (int k = j+1; k < length; k++)
                   {
                       for (int i = k + 1; i < length; i++)
                       {
                           x = a[j];
                           y = a[k];
                           z = a[i];
                           string temp = x.ToString() + y.ToString() + z.ToString();
                           int num = Convert.ToInt32(temp);
                           if (!list.Contains(num))
                           {
                               list.Add(num);
                           }
                       }
                   }
                }
                return list;
            }
      

  4.   

    int[] a={1,2,3,4,5}; 移动123到345就所有的全部取到了。先从开始取开始的三个,移动最后一位的标记直到5
    结束就是134,依此类推,1移动完了
    接着就是234,移动直到5
    表述的不是太清楚,自己在想想。不用是递归
      

  5.   

    非常感谢xuenzhen123同学写的这个方法。效果是达到了。。
    但是还欠缺一点。现在是取3个数组合,如果是更多呢?能不能做的更通用一点。
    也就是数组,跟组合的数量,都以变量的方式传进来。。
      

  6.   

    参考下面代码,SIZE 就是组合数
    using System; 
    class Queen

     const int SIZE = 8;//皇后数 
     public static void Main() 
     { 
      int[] Queen = new int [SIZE];//每行皇后的位置 
      int y,x,i,j,d,t=0; 
      y = 0; 
      Queen[0] = -1; 
      while( true ) 
      { 
       for (x=Queen[y]+1; x<SIZE; x++) 
       { 
        for (i=0;i<y;i++) 
        { 
         j = Queen[i]; 
         d = y-i; 
         //检查新皇后是否与以前的皇后能相互攻击 
         if ((j==x)||(j==x-d)||(j==x+d)) 
          break; 
        } 
        if (i>=y) 
        break;//不攻击 
       } 
       if (x == SIZE) //没有合适的位置 
       { 
        if (0==y) 
        { 
         //回朔到了第一行 
         Console.WriteLine("Done"); 
         break; //结束 
        } 
        //回朔 
        Queen[y]=-1; 
        y--; 
       } 
       else 
       { 
        Queen[y]=x;//确定皇后的位置 
        y++;//下一个皇后 
        if (y<SIZE) 
         Queen[y]=-1; 
        else 
        { 
         //所有的皇后都排完了,输出 
         Console.WriteLine("\n" + ++t +':'); 
         for(i=0;i<SIZE;i++) 
         { 
          for (j=0;j<SIZE;j++) 
          {
           if(Queen[i] == j) 
            Console.Write('Q'); 
           else 
            Console.Write('.'); 
          }
          Console.WriteLine(); 
         } 
         y = SIZE -1;//回朔 
        } 
       } 
      } 
     }