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