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 . . .

这个细管子相当于,栈的结构,后进先出,

定义长度为4的数组,分别存放abcd。随机输出数组中一个,再随机输出数组中剩下的其中一个,直到全部输出。一共有24种可能。

string[] a = new string[4];
a[0] = "a";
a[1] = "b";
a[2] = "c";
a[3] = "d";
foreach (var item0 in a)
{
foreach (var item1 in a)
{
if (item1 == item0)
{
continue;
}
foreach (var item2 in a)
{
if (item2 == item1 || item2 == item0)
{
continue;
}
foreach (var item3 in a)
{
if (item3 == item2 || item3 == item1 || item3 == item0)
{
continue;
}
Console.Write(item0 + item1 + item2 + item3);
Console.WriteLine();
}
}
}
}
Console.ReadKey();
是这个意思吗?