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();
是这个意思吗?