zoukankan      html  css  js  c++  java
  • 面试题(C#算法编程题)

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

  • 相关阅读:
    delphi.数据结构.链表
    delphi.指针.PChar
    delphi.指针.应用
    delphi.memory.分配及释放---New/Dispose, GetMem/FreeMem及其它函数的区别与相同
    Delphi系统变量:IsMultiThread对MM的影响
    安装文件制作工具Wix概念快速入门
    [转]JUnit-4.11使用报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误
    Xiaohe-LeetCode 288 Unique Word Abbreviation
    Xiaohe-LeetCode 100 Same Tree
    Xiaohe-LeetCode 237 Delete Node in a Linked List
  • 原文地址:https://www.cnblogs.com/shenqiboy/p/3551528.html
Copyright © 2011-2022 走看看