面试题(C#算法编程题)

时间:2023-03-08 19:18:05

1>用C#写一段选择排序算法,要求用自己的编程风格。
答:private int min;
    public void xuanZhe(int[] list)//选择排序
    {
        for (int i = 0; i < list.Length - 1; i++)
        {
            min = i;
            for (int j = i + 1; j < list.Length; j++)
            {
                if (list[j] < list[min])
                    min = j;
            }
            int t = list[min];

list[min] = list[i];

list[i] = t;
        }
    }

首先是二分查找法,时间复杂度O(2log2(n)):
        static bool Find(int[] sortedArray, int number)
        {
            if (sortedArray.Length == 0)
                return false;

int start = 0;
            int end = sortedArray.Length - 1;

while (end >= start)
            {
                int middle = (start + end) / 2;
                if (sortedArray[middle] < number)
                    start = middle + 1;
                else if (sortedArray[middle] > number)
                    end = middle - 1;
                else
                    return true;
            }
            return false;
        }

然后是三分查找算法,时间复杂度O(3log3(n)):
       static bool Find(int[] sortedArray, int number)
        {
            if (sortedArray.Length == 0)
                return false;

int start = 0;
            int end = sortedArray.Length - 1;

while (end >= start)
            {
                int firstMiddle = (end - start) / 3 + start;
                int secondMiddle = end - (end - start) / 3;
                if (sortedArray[firstMiddle] > number)
                    end = firstMiddle - 1;
                else if (sortedArray[secondMiddle] < number)
                    start = secondMiddle + 1;
                else if (sortedArray[firstMiddle] != number && sortedArray[secondMiddle] != number)
                {
                    end = secondMiddle - 1;
                    start = firstMiddle + 1;
                }
                else
                    return true;
            }
            return false;
        }

2>一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
private static int Digui(int j)
{
if (j<=0)
return 0;
if (j == 1)
return 1;
return Digui(j-1) + Digui(j - 2);
}

1+2………………n
private static int Digui1(int j)
{
if (j == 0)
return 0;
return Digui1(j - 1) + j;
}

写一个函数计算当参数为N的值:1-2+3-4+5-6+7……+N
答:public int returnSum(int n)
    {
        int sum = 0;
        for (int i = 1; i <= n; i++)
        {
            int k = i;
            if (i % 2 == 0)
            {
                k = -k;
            }
            sum = sum + k;
        }
        return sum;
        
    }

public int returnSum1(int n)
    {
        int k = n;
        if (n == 0)
        {
            return 0;
        }
        if (n % 2 == 0)
        {
            k = -k;
        }
        return aaa(n - 1) + k;
    }

3>20个随机数列
Dictionary<string, int[]> dict = new Dictionary<string, int[]>();

ArrayList newArray;
            int[] intArray;
            Random rd;

while (dict.Count < 20)
            {
                intArray = new int[5];
                rd = new Random();
                newArray = new ArrayList();
                while (newArray.Count < 5)
                {
                    int tempNumber = rd.Next(0, 10);
                    if (!newArray.Contains(tempNumber))
                        newArray.Add(tempNumber);
                }
                string str=ArrayConvertToString(newArray);
                for (int i = 0; i < 5; i++)
                {
                    intArray[i] = (int)newArray[i];
                }
                if (!dict.ContainsKey(str))
                {
                    dict.Add(str, intArray);
                }
            }
            
            foreach (var l in dict)
            {
                Console.WriteLine(l.Key);
            }
            Console.WriteLine("@@" + dict.Keys.Max() + "@@" + dict.Keys.Min());
            Console.ReadKey();
        }

static public  string ArrayConvertToString(ArrayList al)
        {
            string strTemp=string.Empty;
            foreach (var aList in al)
            {
                strTemp += aList;
            }
            return strTemp;
        }

4>

public abstract class A
    {
        public A()
        {
            Console.WriteLine('A');
        }
        public virtual void Fun()
        {
            Console.WriteLine("A.Fun()");
        }
    }

public class B : A
    {
        public B()
        {
            Console.WriteLine('B');
        }
        public new void Fun()
        {
            Console.WriteLine(" B.Fun()");
        }
        public static void Main()
        {
            A a = new B();
            a.Fun();
            Console.Read();
        }
 A B  A.fun()

public class A
    {
        public virtual void Fun1(int i)
        {
            Console.WriteLine(i);
        }
        public void Fun2(A a)
        {
            a.Fun1(1);
            Fun1(5);
        }
    }
    public class B : A
    {
        public override void Fun1(int i)
        {
            base.Fun1(i + 1);
        }
        public static void Main()
        {
            A a = new A();
            B b = new B();
            a.Fun2(b);
            b.Fun2(a);
            Console.Read();
        }
    }

2 5 1 6

6. 写出程序的输出结果
class Class1  {
       private string str = "Class1.str";
       private int i = 0;2
       static void StringConvert(string str)  {
           str = "string being converted.";
       }
       static void StringConvert(Class1 c)  {
           c.str = "string being converted.";
       }
       static void Add(int i)  {
           i++;
       }
       static void AddWithRef(ref int i)  {
           i++;
       }
       static void Main()  {
           int i1 = 10;
           int i2 = 20;
           string str = "str";
           Class1 c = new Class1();
           Add(i1);
           AddWithRef(ref i2);21
           Add(c.i);
           StringConvert(str);         
           StringConvert(c);
           Console.WriteLine(i1);
           Console.WriteLine(i2);
           Console.WriteLine(c.i);
           Console.WriteLine(str);
           Console.WriteLine(c.str);
       }  
    }
答:10,21,0,str,string being converted.

10.  程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)
要求:  1.要有联动性,老鼠和主人的行为是被动的。
2.考虑可扩展性,猫的叫声可能引起其他联动效应。
 public interface Observer
    {
        void Response();    //观察者的响应,如是老鼠见到猫的反映
    }
    public interface Subject
    {
        void AimAt(Observer obs);  //针对哪些观察者,这里指猫的要扑捉的对象---老鼠
    }
    public class Mouse : Observer
    {
        private string name;
        public Mouse(string name, Subject subj)
        {           
            this.name = name;
            subj.AimAt(this);
        }
        
        public void Response()
        {
            Console.WriteLine(name + " attempt to escape!");
        }
    }
    public class Master : Observer
    {   
        public Master(Subject subj)
        {           
            subj.AimAt(this);
        }
        
        public void Response()
        {
            Console.WriteLine("Host waken!");
        }  
    }
 
    public class Cat : Subject
    {
        private ArrayList observers;
        public Cat()
        {   
            this.observers = new ArrayList();
        }
        public void AimAt(Observer obs)
        {
            this.observers.Add(obs);
        }
        public void Cry()
        {
            Console.WriteLine("Cat cryed!");
            foreach (Observer obs in this.observers)
            {
                obs.Response();
            }
        }
    }
    class MainClass
    {       
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            Mouse mouse1 = new Mouse("mouse1", cat);
            Mouse mouse2 = new Mouse("mouse2", cat);
            Master master = new Master(cat);
            cat.Cry();
        }
    }

//---------------------------------------------------------------------------------------------
设计方法二: 使用event -- delegate设计..
    public delegate void SubEventHandler();
    public abstract class Subject
    {
        public event SubEventHandler SubEvent;
        protected void FireAway()
        {
            if (this.SubEvent != null)
                this.SubEvent();
        }   
    }
    public class Cat : Subject
    {  
        public void Cry()
        {
            Console.WriteLine("cat cryed.");
            this.FireAway();
        }
    }
    public abstract class Observer
    {
        public Observer(Subject sub)
        {
            sub.SubEvent += new SubEventHandler(Response);
        }
        public abstract void Response();    
    }
    public class Mouse : Observer
    {
        private string name;
        public Mouse(string name, Subject sub) : base(sub)
        {   
            this.name = name;
        }
        public override void Response()
        {
            Console.WriteLine(name + " attempt to escape!");
        }
    }
    public class Master : Observer
    {
        public Master(Subject sub) : base(sub){}
        public override void Response()
        {
            Console.WriteLine("host waken");
        }
    }
    class Class1
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            Mouse mouse1 = new Mouse("mouse1", cat);
            Mouse mouse2 = new Mouse("mouse2", cat);
            Master master = new Master(cat);
            cat.Cry();
        }
    }