1. 一个字符串参数(value)由字母(a-z,A-Z)组成,且最大字符位数为40,要求写一个函数(maxLength)返回该参数中连续相同字母的最大个数及该字母,如果最大位数有多个,则返回第一个。例:字符串“aaaddxxxxddddxxxx”,返回值为:“x,4”。
要求:请考虑代码执行的效率并注意编码的风格。2. 现有一个类person有三个属性,分别是name,age,sex。有一个List对象,保存了很多person对象的实例,请编写一个函数,对List里的实例进行排序。条件:18岁以上的人,排序顺序:性别,年龄,姓名全部降序。3. 有一个水果箱(box),箱子里装有水果(fruit)。每一种水果都有不同的重量(weight)和颜色(color),水果有:苹果(apple),梨(pear)。可以向水果箱(box)里添加水果(addFruit),也可以取出水果(getFruit)。请编写java代码实现上述功能。4. 有一静态整形变量X,初始值为0,用JAVA写四个线程,二个对其加1,二个对其减一,X等于0时不进行减操作,X等于5时结束程序。5. 编写一函数,将一个数字转换成中文返回。数字的最大值为99999,最小值为0,没有小数。例:输入“3587”,返回“三千伍百八十七”。
//  这个是从Java版偷过来的。嘿嘿
// http://topic.csdn.net/u/20100711/15/94889215-c666-4716-a6b5-1c0c8446db35.html

解决方案 »

  1.   

    第一题
    private char GetMaxChar(string p,out int maxcount)
        {
            if (null == p)
                throw new ArgumentNullException();
            if (p.Length == 0)
                throw new ArgumentException("参数不能为空");        char pre = p[0], maxchar = p[0];
            int count = 1;
            maxcount = 1;
            for (int i = 1; i < p.Length; i++)
            {
                if (pre == p[i])
                {
                    count++;
                }
                else
                {
                    
                    if (count > maxcount)
                    {
                        maxcount = count;
                        maxchar = pre;
                    }
                    pre = p[i];
                    count = 1;
                }
            }        return maxchar;
        }
      

  2.   

    1、static string find(string str)
            {
                char tempStr='\0';
                char maxStr = '\0';
                int maxCount=0;
                int tempCount = 0;
                foreach (char c in str)
                {
                    if (tempStr.Equals(c))
                    {
                        tempCount++;
                    }
                    else
                    {
                        tempStr = c;
                        tempCount = 1;
                    }                if (tempCount > maxCount)
                    {
                        maxCount = tempCount;
                        maxStr = tempStr;
                    }
                }
                return maxStr.ToString() + "," + maxCount.ToString();
            }
      

  3.   

    先解决第一道:复杂度O(n)public static string GetMaxLength(string str)
            {
                char maxChar = new char();
                int maxCount = 0;
                char tempChar = new char();
                int tempCount = 0;            for (int i = 0; i < str.Length; i++)
                {
                    if (str[i] == tempChar)
                        tempCount ++;
                    else
                    {
                        if (tempCount > maxCount)
                        {
                            maxChar = tempChar;
                            maxCount = tempCount;
                        }
                        tempChar = str[i];
                        tempCount = 1;
                    } 
                }
                return maxChar.ToString() + "," + maxCount.ToString(); 
            }
      

  4.   

    2 class Person : IComparable<Person>
        {
           //省略属性
     public int CompareTo(Person other)
            {
              
                if (!Sex.Equals(other.Sex))
                {
                    return other.Sex.CompareTo(Sex);
                }
                if (!Age.Equals(other.Age))
                {
                    return other.Age.CompareTo(Age);
                }
                if (!Name.Equals(other.Name))
                {
                    return other.Name.CompareTo(Name);
                }
                return 0;
            }List<Person> all=new List<Person>();
    //增加数据
    all.Sort();
      

  5.   

    2
    persons.Sort(delegate(Person left,Person right)
            {
                if (left.sex == right.sex)
                {
                    if (left.age > right.age)
                        return 1;
                    else if (left.age < right.age)
                        return -1;                return 0;
                }            if (right.sex)
                    return 2;
                else
                    return -2;
            });
      

  6.   

    3、abstract class fruit
    {
       public abstract int Weight
       {
          get;set;
       }
       public abstract string Color
       {
           get;set;
       }
    }class apple:fruit
    {
       public override int Weight
       {
         get{//实现}
         set{//实现}
       }
       //color类似
    }
    class pear:fruit
    {
       //类似苹果
    }class box
    {
         List<fruit> fruits=new List<fruit>();
        public void addFruit(fruit obj)
        {
              fruits.Add(obj);
        }
        public void getFruit(fruit obj)
        {
              fruits.Remove(obj);
        }
    }C#里
    此题比第二题还无算法意义,
    第二题无需算法
    本题就一个多态
    如果高兴还可以在box类中实现this索引器,或者实现IList<fruit>接口亦可
      

  7.   

    5. 编写一函数,将一个数字转换成中文返回。数字的最大值为99999,最小值为0,没有小数。例:输入“3587”,返回“三千伍百八十七”。
            private static string Demo(int num)
            {
                int length=num.ToString().Length;
                if (length > 5)
                {
                    return "超出5位";
                }
                char[] ch = new char[] { '万', '千', '百', '十' };
                string nn = num.ToString();
                StringBuilder sb = new StringBuilder();
                            char[] cn=new char[length];
                int i = 0;
                foreach (char c in nn)
                {
                    switch (int.Parse(c.ToString()))
                    {
                        case 1: cn[i] = '一'; break;
                        case 2: cn[i] = '二'; break;
                        case 3: cn[i] = '三'; break;
                        case 4: cn[i] = '四'; break;
                        case 5: cn[i] = '五'; break;
                        case 6: cn[i] = '六'; break;
                        case 7: cn[i] = '七'; break;
                        case 8: cn[i] = '八'; break;
                        case 9: cn[i] = '九'; break;
                        case 0: cn[i] = '零'; break;
                    }
                    i++;
                }
                switch(length)
                {
                    case 0: return "零";break;
                    case 1: return cn[0].ToString(); break;
                    case 2: return cn[0].ToString() + ch[3].ToString() + cn[1].ToString(); break;
                    case 3: return cn[0].ToString() + ch[2].ToString() + cn[1].ToString() + ch[3].ToString() + cn[2].ToString(); break;
                    case 4: return cn[0].ToString() + ch[1].ToString() + cn[1].ToString() + ch[2].ToString() + cn[2].ToString() + ch[3].ToString() + cn[3].ToString(); break;
                    case 5: return cn[0].ToString() + ch[0].ToString() + cn[1].ToString() + ch[1].ToString() + cn[2].ToString() + ch[2].ToString() + cn[3].ToString() + ch[3].ToString() + cn[4].ToString(); break;
                    default: return null;
                }
            }
    笨方法
      

  8.   

    4、  static object lockObj = new object();
            static int i=0;
            static void Operate(object flag)
            {
                while (true)
                {
                    lock (lockObj)
                    {
                        if (i == 5)
                            break;
                        if (flag.ToString() == "add")
                        {
                            
                            Console.WriteLine("{0}把i从{1}增加到{2}",Thread.CurrentThread.Name,i,++i);
                        }
                        else
                        {
                            if (i != 0)
                            {
                                Console.WriteLine("{0}把i从{1}减少到{2}",Thread.CurrentThread.Name, i,--i);
                            }
                        }
                    }
                }
                Console.WriteLine("{0}已经结束",Thread.CurrentThread.Name);
            }
    调用  Thread thd1 = new Thread(new ParameterizedThreadStart(Operate));
                Thread thd2 = new Thread(new ParameterizedThreadStart(Operate));
                Thread thd3 = new Thread(new ParameterizedThreadStart(Operate));
                Thread thd4 = new Thread(new ParameterizedThreadStart(Operate));
                thd1.Name = "线程1";
                thd2.Name = "线程2";
                thd3.Name = "线程3";
                thd4.Name = "线程4";
                thd1.Start("add");
                thd2.Start("add");
                thd3.Start("");
                thd4.Start("");
      

  9.   

    5、
    未详细调试,可能有bugstring[] moneys ={
                "零",
                "壹",
                "贰",
                "叁",
                "肆",
                "伍",
                "陆",
                "柒",
                "捌",
                "玖"
            };        string[] powers ={
                "拾",
                "佰",
                "仟",
                "万",
                "拾",
                "佰",
                "仟",
                "亿"
            };
            string Money2Chinese(long money)
            {
                string result = Money2Chinese(money, 0);
                result = Regex.Replace(result, "零[拾佰仟]", "零");
                result = result.Replace("零万", "万");
                result = Regex.Replace(result, "(零)+", "零");//去除重复零
                if (result.EndsWith("零"))
                    result = result.Substring(0, result.Length - 1);            return result + "元整";
            }        string Money2Chinese(long money, int power)
            {
                long yu = money % 10;
                long shang = money / 10;
                if (shang == 0)
                {
                    return moneys[yu];
                }
                else
                {
                    if (power > powers.Length - 1)
                        power = 0;                string str = Money2Chinese(shang, power + 1) + powers[power] + moneys[yu];
                    return str;            }
            }
    感觉是初级程序员面试题,顺着楼主的链接到java版一看,果然是面试题
    第五题估计手写不好写,会有bug,其他还好
      

  10.   

    这里有问题,如果我的字符串没有相连在一起而知这样string str = "aassavvddddeeegeee";就错了
      

  11.   

    showlin 你真是高手啊 在哪里都见到你 上次还帮我解决了一个问题 
      

  12.   

    解第一题:   
    #region 判断字符串中出现频率最高字符及出现次数
            public static int VipCharInStr(string _str, out char _c)
            {
                string _s=_str;
                if (_s == null || _s.Length == 0)
                {
                    _c = new char();
                    return 0;
                }
                int t=0;
                _c = _str[0];
                while (_s.Length > 0)
                {
                    VipCharInStr(ref _s, ref t,_s[0], ref _c);
                }
                return t;
            }
            private static void VipCharInStr(ref string _str,ref int cnt,char _c,ref char _c1)
            {
                int j=0;
                bool fnd=false;
                for (int i = 0; i < _str.Length; i++)
                {
                    if (_str[i] == _c) j++;
                    if(j>cnt)
                    {
                        fnd=true;
                        _c1=_c;
                        cnt = j;
                    }
                }
                //_str.Replace(_c1, new char());
                _str=_str.Replace(_c.ToString(), "");
     
            }
            #endregion