基础算法(C#)
1.fibonacci斐波纳契数列问题:数列(1,1,2,3,5,8,13...)第i位是多少?
1 /// <summary> 2 /// 递归 3 /// </summary> 4 public int Foo(int i) 5 { 6 if (i <= 0) 7 return 0; 8 else if (i > 0 && i <= 2) 9 return 1; 10 else 11 return Foo(i - 1) + Foo(i - 2); 12 }
2.求数列(1,1,2,3,5,8,13...)的和。
1 public int Sum(int index) 2 { 3 int sum = 0; 4 for (int i = 1; i <= index; i++) 5 sum += Foo(i); 6 return sum; 7 }
3.求1-2+3-4+5-6...+m的值
1 public int Sum(int m) 2 { 3 int sum = 0; 4 if (m <= 0) return 0; 5 for (int i = 1; i <= m; i++) 6 { 7 if (i % 2 == 0) 8 sum -= i; 9 else 10 sum += i; 11 } 12 return sum; 13 }
4.写一个简单的冒泡排序
1 /// <summary> 2 /// 冒泡排序 3 /// </summary> 4 public Array BubbleSort(int[] array) 5 { 6 if (array == null || array.Length <= 0) 7 return null; 8 int temp = 0; 9 10 for (int i = 0; i < array.Length - 1; i++) 11 { 12 for (int j = 0; j < array.Length - 1 - i; j++) 13 { 14 if (array[j] > array[j + 1]) 15 { 16 temp = array[j]; 17 array[j] = array[j + 1]; 18 array[j + 1] = temp; 19 } 20 } 21 } 22 23 return array; 24 }
5.八皇后问题:使棋盘上的8个皇后不能在同一行、同一列或同一条斜线上,请问有多少解法?
1 public static void Main(string[] args) 2 { 3 //回溯算法 4 int size = 8; //皇后数 5 QueenArithmetic(size); 6 } 7 static void QueenArithmetic(int size) 8 { 9 int[] Queen = new int[size]; //每行皇后的位置 10 int y, x, i, j, d, t = 0; 11 y = 0; 12 Queen[0] = -1; 13 while (true) 14 { 15 for (x = Queen[y] + 1; x < size; x++) 16 { 17 for (i = 0; i < y; i++) 18 { 19 j = Queen[i]; 20 d = y - i; 21 //检查新皇后是否能与以前的皇后相互攻击 22 if ((j == x) || (j == x - d) || (j == x + d)) 23 break; 24 } 25 if (i >= y) 26 break; //不攻击 27 } 28 if (x == size) //没有合适的位置 29 { 30 if (0 == y) 31 { 32 Console.WriteLine("Over"); //回溯到了第一行 33 break; //结束 34 } 35 Queen[y] = -1; //回溯 36 y--; 37 } 38 else 39 { 40 Queen[y] = x; //确定皇后的位置 41 y++; //下一个皇后 42 if (y < size) 43 Queen[y] = -1; 44 else 45 { 46 //所有的皇后都排完了,输出 47 Console.WriteLine("\n" + ++t + ':'); 48 for (i = 0; i < size; i++) 49 { 50 for (j = 0; j < size; j++) 51 Console.Write(Queen[i] == j ? 'Q' : '*'); 52 Console.WriteLine(); 53 } 54 y = size - 1; //回溯 55 } 56 } 57 } 58 Console.ReadLine(); 59 }
收余恨、免娇嗔、且自信、改性情,休恋逝水,苦海回身,早悟兰因。