谈一道笔试题

           其实这篇博客早就该写了,这是我来北京找工作的时候,收到的一个公司给我笔试题。要求是这样的:

             

 

                     大家也可以试着做做,我想对于那些大牛来说,太小儿科了。但是,对于我们这些刚刚进入职场的小鸟来说,还是要花一些时间的。我自己做了一个下午才做出来。

             不过,今天在公司的时候,想写一个总结,可是在电脑却怎么也运行不出来了,报一个非常不也的错误。

             后来,我找到了报错的原因,可是并不是代码的问题,是因为我开始是在我的笔记本上做的,因为我笔记本上装的是vs2012,然后生成代码时,怕看代码的人没有高版本的VS,由于生成的是.netframework4.0。然后在公司的时候,打开就运行不出来,然后回家之后在VS2012上还原回.netframework4.5就好了。

            这也让我引发了一个思考,我个人觉得,新版本的编程工具会好些,一个显著的原因就是它的智能提示啊什么的,当然还有其它的一些。但是,新旧版本的交替需要一个过程。

            下面我来show一下自己的实现方法吧。

首先是获取远程服务器上的数据,这个挺简单的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;

namespace WriteTest
{
    class GetData
    {
        /// <summary>
        /// 获取远程数据,返回一个字符串
        /// </summary>
        /// <returns></returns>
        public string GetUrlData()
        {
            WebClient client = new WebClient();
            string data = client.DownloadString("http://kj.edu24ol.com/update/qa/qa1.txt");
            return data;
        }
    }
}


 哦,对了,忘记说了,为了简单,我用的是winfrom实现的。

下面是对数据进行处理的类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WriteTest
{
    public class Data:IComparable<Data>
    {
        protected string _first;
        protected string _second;
        public Data(char[] charData)
        {
            if (charData.Length==2)
            {
                this._first = charData[0].ToString();
                this._second = charData[1].ToString();
            }
            else
            {
                this._first = charData[0].ToString();
            }
        }

        public Data(string first)
        {
            this._first = first;
            this._second = null;
        }

        /// <summary>返回整个字符串
        /// 
        /// </summary>
        /// <returns></returns>
        private string GetWholeString()
        {
            return this._first + this._second;
        }

        /// <summary>获取data是由多少个数组成的。
        /// 
        /// </summary>
        /// <returns></returns>
        private int GetLength()
        {
            if (this._first!=null && this._second!=null)
            {
                return 2;
            }
            else
            {
                if (this._first==null && this._second==null)
                {
                    return 0;
                }
                return 1;
            }
        }
        /// <summary>只有两个字符都在特殊字符里,而且不相等,才返回true
/// 
/// </summary>
/// <param name="one"></param>
/// <param name="two"></param>
/// <returns></returns>
        private bool SpecialSort(string one, string two)
        {
            string containString = "jaGg8rDfUbW";
            if (containString.Contains(one) && containString.Contains(two))
            {
                int thisIndex = containString.IndexOf(one);
                int otherIndex = containString.IndexOf(two);
                if (thisIndex!=otherIndex)
                {
                    return true;
                }
            }
            return false;
        }

        /// <summary>比较特殊字符
        /// 
        /// </summary>
        /// <param name="one"></param>
        /// <param name="two"></param>
        /// <returns></returns>
        private int GetResult(string one, string two)
        {
            string containString = "jaGg8rDfUbW";
            int thisIndex = containString.IndexOf(one);
            int otherIndex = containString.IndexOf(two);
            return thisIndex - otherIndex;
        }

        
        public int CompareTo(Data other)
        {
            if (this == null)
            {
                if (other == null)
                {
                    //如果两个都为空,那么返回0
                    return 0;
                }
                else
                {
                    //如果other不为空的话,那么other更大
                    return -1;
                }
            }
            else
            {
                if (other == null)
                // this不为空,other为空,那么this更大
                {
                    return 1;
                }
                else
                {
                    //都不为空,那么比较对应的属性
                    //数字或者字母多的,更大
                    int retval = this.GetLength().CompareTo(other.GetLength());

                    if (retval != 0)
                    {
                        return retval;
                    }
                    else
                    {
                        if (SpecialSort(this._first,other._first))
                        {
                            return GetResult(this._first, other._first);
                        }
                        else
                        {
                            if (this._first.CompareTo(other._first)!=0)
                            {
                                return this._first.CompareTo(other._first);
                            }
                            else
                            {
                                if (SpecialSort(this._second,other._second))
                                {
                                    return GetResult(this._second, other._second);
                                }
                                return this._second.CompareTo(other._second);
                            }
                        } 
                    }
                }
            }

        }

        //重写toString方法
        public override string ToString()
        {
            return this._first + this._second;
        }
    }
}


界面的设计如图所示:

谈一道笔试题_第1张图片

界面下的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;


namespace WriteTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //获取远程的字符串
            string wholeString = new GetData().GetUrlData();

            #region 测试
            //Data d1 = new Data("a", "c");
            //Data d2 = new Data("d", "e");

            //List<Data> list = new List<Data>();
            //list.Add(d1);
            //list.Add(d2);

            //list.Sort();

            //foreach (Data d in list)
            //{
            //    txtData.Text = txtData.Text+d.ToString()+"\r\n";
            //}
#endregion

            //获取每行的字符,放在数组里。
            string[] rowString= wholeString.Split(new string[1]{"\r\n"}, StringSplitOptions.None);

            foreach (string str in rowString)
            {
                //txtData.Text = txtData.Text+ str + "\r\n";
                //把每行中的两个挨着的字符,放在数组里。
                string[] singleString = str.Split(new string[1] { " " }, StringSplitOptions.None);

                //实例化Data数组。
                Data[] data = new Data[singleString.Length];
                int i = 0;

                foreach (string strData in singleString)
                {
                    data[i] = new Data(strData.ToCharArray());
                    i = i + 1;
                }

                List<Data> list = new List<Data>();
                list.AddRange(data);
                //排序,调用data里的compareto方法
                list.Sort();
                
                foreach (Data val in list)
	            {
                    txtData.Text = txtData.Text + val.ToString()+" ";
	            }
                txtData.Text = txtData.Text + "\r\n";
            }
        }
    }
}


提供一个下载吧,如果有兴趣的朋友,可以下载下来看看:

http://download.csdn.net/detail/yjjm1990/5076225

 

      不过,我最后把我做的代码发给HR了,可是没有收到回信,不知道是我写的代码不行还是怎么回事。希望与大家进行交流。

 

 

你可能感兴趣的:(谈一道笔试题)