C# 两个孩子,一个孩子将a b c d 4个球放入一个只有一端开放的细管子里

C# 两个孩子,一个孩子将a b c d 4个球放入一个只有一端开放的细管子里

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static IEnumerable<string> foo(string seed, int max)
        {
            if (seed.Count(x => x == '+') == max && seed.Count(x => x == '-') == max)
                yield return seed;
            if (seed.Count(x => x == '+') > seed.Count(x => x == '-'))
                foreach (string s in foo(seed + "-", max))
                    yield return s;
            if (seed.Count(x => x == '+') <= max)
                foreach (string s in foo(seed + "+", max))
                    yield return s;
        }

        static void display(string s)
        {
            Console.Write(s + "\t");
            char c = 'a';
            Stack<char> st = new Stack<char>();
            foreach (char ch in s)
            {
                if (ch == '+') st.Push(c++);
                if (ch == '-') Console.Write(st.Pop());
            }
            Console.WriteLine();
        }
        static void Main(string[] args)
        {
            foreach (string s in foo("", 4)) display(s);
        }
    }
}

+-+-+-+- abcd
+-+-++-- abdc
+-++--+- acbd
+-++-+-- acdb
+-+++--- adcb
++--+-+- bacd
++--++-- badc
++-+--+- bcad
++-+-+-- bcda
++-++--- bdca
+++---+- cbad
+++--+-- cbda
+++-+--- cdba
++++---- dcba
Press any key to continue . . .