基础知识 - .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);
    }
}

 

posted @ 2019-09-11 15:07  FH1004322  阅读(610)  评论(0)    收藏  举报