C#经典算法面试题

C#经典算法面试题

    • 1.使用递归算法来实现计算1+2+3+4+…+100的结果
    • 2.实现一个冒泡排序算法(升序)
    • 3.实现一个方法,对于输入的任意字符串,统计出其中每一种字符出现的次数
    • 4.实现一个将字符串转换为整数的方法,不要使用int.Parse、int.TryParse、Convert.ToInt32等任何类库方法
    • 5.一列数的规则如下 : 1 、 1 、 2 、 3 、 5 、 8 、 13 、 21 、 34...... 求第 30 位数是多少, 用递归算法实现

1.使用递归算法来实现计算1+2+3+4+…+100的结果

static int SUM(int x)
{
  if (x <= 1)
    return x;
	else
    return x + SUM(x - 1);
}

2.实现一个冒泡排序算法(升序)

static void Sort(int[] nums)
{
    int temp;
    for (int i = 0; i < nums.Length; i++)
    {
        for (int j = i + 1; j < nums.Length; j++)
        {
            if (nums[i] > nums[j])
            {
                temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
            }
        }
        Console.WriteLine(nums[i]);
    }
}

3.实现一个方法,对于输入的任意字符串,统计出其中每一种字符出现的次数

/** 字典的定义
 必须包含名空间System.Collection.Generic
 Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值)
 键必须是唯一的,而值不需要唯一的
 键和值都可以是任何类型(比如:string, int, 自定义类型,等等)
 通过一个键读取一个值的时间是接近O(1)
 键值对之间的偏序可以不定义
*/
static void CountChar(string str)
{
    Dictionary<char, int> dic = new Dictionary<char, int>();
    foreach (char c in str)
    {
        if (dic.ContainsKey(c))
            dic[c]++;
        else
            dic.Add(c, 1);
    }
    foreach (KeyValuePair<char, int> p in dic)
    {
        Console.WriteLine("字符{0},出现的次数{1}", p.Key.ToString(), p.Value.ToString());
    }
}

4.实现一个将字符串转换为整数的方法,不要使用int.Parse、int.TryParse、Convert.ToInt32等任何类库方法

static bool TryParse(string s, out int num)
{
    if (!string.IsNullOrWhiteSpace(s))
    {
        num = 0;
        return false;
    }
    int result = 0;

    bool minus = s[0] == '-' ? true : false;
    if (minus && s.Length == 1)
    {
        num = 0;
        return false;
    }

    for (int i = minus ? 1 : 0; i < s.Length; i++)
    {
        if (s[i] >= '0' && s[i] <= '9')
        {
            result = s[i] - 48 + result * 10;
        }
        else
        {
            num = 0;
            return false;
        }
    }

    num = minus ? -result : result;
    return true;
}

5.一列数的规则如下 : 1 、 1 、 2 、 3 、 5 、 8 、 13 、 21 、 34… 求第 30 位数是多少, 用递归算法实现

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);
}

你可能感兴趣的:(C#,算法,c#,经验分享,面试,程序人生)