假设:
变量a的取值范围为1到6,步长为1
变量b的取值范围为2到5,步长为1
变量c的取值范围为3到7,步长为1
.
.
.
变量n的取值范围为5到9,步长为1有多少个变量是不确定的。求a.ToString()+b.ToString()+c.ToString()+...+n.ToString()的所有排列方式。各位高手如用C#实现有什么好方法吗?

解决方案 »

  1.   

    假设a,b,c...n的定义保存到一个Hashtable里。
      

  2.   


    static void Main()
    {
        Permutation(Enumerable.Range(1, 6), new[] { 2, 3, 4, 5 }, Enumerable.Range(3, 5));
    }public static void Permutation(params IEnumerable<int>[] ranges)
    {
        Permutation(new Stack<int>(), ranges);
    }
    private static void Permutation(Stack<int> stack, IEnumerable<int>[] ranges)
    {
        int left = ranges.Length - stack.Count;
        if (left == 0)
        {
            Console.WriteLine(string.Join(",", stack.Select(i => i.ToString()).ToArray()));
        }
        else
        {
            foreach(int i in ranges[left - 1])
            {
                stack.Push(i);
                Permutation(stack, ranges);
                stack.Pop();
            }
        }
    }
      

  3.   

    回复gomoku :
         调用Permutation方法,你这里是三个变量传进去,但如果这个变量数并不确定有多少个呢,变量的定义在我说的Hashtable里又该怎么调用Permutation方法呢?