您的位置:首页 > 职场人生

一道C#面试题

2013-03-25 18:03 211 查看
我出的一道C#面试题

统计"0"字符数量,并将统计数字插入到字符中。要求:

 输入:

 rnbakabnr/000000000/0c00000c0/p0p0p0p0p/000000000/000000000/P0P0P0P0P/0C00000C0/000000000/RNBAKABNR

 输出: rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR

循环实现:

 private string TestNum()

        {

            string str = "rnbakabnr/000000000/0c00000c0/p0p0p0p0p/000000000/000000000/P0P0P0P0P/0C00000C0/000000000/RNBAKABNR";

            string[] strList = str.Split('0');

            string strResult = string.Empty;

            int j = 1;

            for (int i = 0; i < strList.Length; i++)

            {

                if (string.IsNullOrEmpty(strList[i]))

                {

                    j++;

                }

                else

                {

                    strResult += ((i == 0) ? "" : j.ToString()) + strList[i];

                    j = 1;

                }

            }

            return strResult;

        }

 

递归实现:

 private string ProssStr(string tempStr)

        {

            string tempAll = "";

            int j0 = tempStr.IndexOf('0');

            if (j0 > -1)

            {

                int j1 = 0;

                for (int i = 0; i < tempStr.Length - j0; i++)

                {

                    string k2 = tempStr.Substring(j0 + i, 1);

                    if (k2 == "0")

                    {

                        j1 = j1 + 1;

                    }

                    else

                    {

                        break;

                    }

                }

                string tempStr1 = tempStr.Remove(j0, j1).Insert(j0, j1.ToString());

                tempAll = ProssStr(tempStr1);

            }

            else

            {

                tempAll = tempStr;

            }

            return tempAll;

        }

调用:

            string tempStrAll = "";

            string s = "rnbakabnr/000000000/0c00000c0/p0p0p0p0p/000000000/000000000/P0P0P0P0P/0C00000C0/000000000/RNBAKABNR";

            tempStrAll = ProssStr(s);

对程序而言:其实我想测试的是对:程序=数据结构+算法,的理解。

深层次分析:

递归特点:1,入口。2,自己调用自己。3,出口。缺一不可。

循环特点:1,初始值,2,循环体。3,退出条件。

递归与循环的区别:递归用于执行次数不确定,循环事先能够知道执行次数。

你看到这个题的秘密了吗?

将字符串“rnbakabnr/000000000/0c00000c0/p0p0p0p0p/000000000/000000000/P0P0P0P0P/0C00000C0/000000000/RNBAKABNR”变成

rnbakabnr

000000000

0c00000c0

p0p0p0p0p

000000000

000000000

P0P0P0P0P

0C00000C0

000000000

RNBAKABNR

9X10象棋棋盘,棋子布局。

rnbakabnr

000000000

0c00000c0

p0p0p0p0p

000000000

楚河 汉界

000000000

P0P0P0P0P

0C00000C0

000000000

RNBAKABNR

小写代表黑方,大写代表红方。

r车n马b像a士k将c炮p卒

 

这个题算法可以看做是棋子,棋盘的保存算法。

换一种角度:如果你把字符变换位置,形成新的字符串,就成了象棋着法。

当两个人下棋,就形成不同的字符串。如果是网络联机对弈,本质上就是“rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR”这个字符串传来传去通讯。

这个字符串可以看做通讯协议。把每次传递的字符串按顺序记录下来,就能处理悔棋,初始化等问题。

就像互联网是通过,形成HTML格式文档一样呈现在浏览器中。

 

从另外一个角度而言:可以根据传递的字符串,预测对方所有着数。找出自己最优的字符着数。本质上核心思想就是人工智能。 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: