基础算法(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         }

 

posted @ 2020-06-05 03:29  chocolateXLL  阅读(248)  评论(0编辑  收藏  举报