收同学发来的一个面试题,好久没碰算法方面的题了:
自己推理也不难找出一个答案,写程序就是一个全排列列举所有的可能性,然后去验证是否符合题目要求的
代码如下:
class Program
{
static void Main(string[] args)
{
char[] arr = new char[] { 'A', 'B', 'C', 'D', 'E', 'F' };
func(arr, 0);
Console.ReadLine();
}
private static void func(char[] arr, int k)
{
if (k == arr.Length)
{
if (check(new string(arr)))
Console.WriteLine(new string(arr));
return;
}
else
{
for (int i = k; i < arr.Length; i++)
{
{ char temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; }
func(arr, k + 1);
{ char temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; }
}
}
}
private static bool check(string str)
{
if (str.IndexOf("C") > str.IndexOf("E"))
return false;
if (str.IndexOf("A") < str.IndexOf("F"))
return false;
if (str.IndexOf("E") == 4)
return false;
if (str.IndexOf("B") - str.IndexOf("E") != 1)
return false;
if (Math.Abs(str.IndexOf("D") - str.IndexOf("A")) == 3)
return true;
else
return false;
}
}
答案: