基础知识 - .Net 算法
1.一个整型数组除了一个数字外,其他的数字都出现了两次,请写程序找出出现一次的数字
答:异或运算(^),如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
异或的性质:对于整数a,有(1) a^a=0(2)a^0=a(2)a^b^c=a^(b^c)=(a^c)^b
int[] array = { 1, 1, 2, 3, 4, 2, 3, 4, 11, 6, 6, 7, 7, 8, 8, 9, 9 }; int result = 0; for (int i = 0; i < array.Length; i++) { result ^= array[i]; } Console.Write(result);
2.兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子,如果兔子都不死,那么一年以后可以繁殖多小对兔子?
答:斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
3.一列数的规则如下: 1、1、2、3、5、8、13、21、34…… 求第30位数是多少, 用递归算法实现。
public static int Foo(int i) { if (i <= 0) return 0; else if(i > 0 && i <= 2) return 1; else return Foo(i -1) + Foo(i – 2); }
4.用C#创建一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
public static void GenerateNum() { int i = 0; int count = 100; int[] arr = new int[count]; while (i < count) { Random r = new Random(); //后面随机到正确的数字几率太少 int current_num = r.Next(100); bool isRepate = false; for (int j = 0; j < count; j++) { if (arr[j] == current_num) { isRepate = true; break; } } if (!isRepate) arr[i++] = current_num; } foreach (int k in arr) { Console.WriteLine(k); } }