收同学发来的一个面试题,好久没碰算法方面的题了:

自己推理也不难找出一个答案,写程序就是一个全排列列举所有的可能性,然后去验证是否符合题目要求的
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| 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; } }
|
答案:
