读书人

分享一个面试题解决方法

发布时间: 2012-04-03 12:38:19 作者: rapoo

分享一个面试题
输入任务一个大于0的数字n,从1到n,报数1 2 3,1 2 3,1 2.....每报到三的人出列,依次循环,直至剩下最后一个或两个数字为止,求最后这一个或两个数字是多少?

我写了一个:
大家有更好,更有效率的也请分享下代码和思路吧

C# code
private void button1_Click(object sender, EventArgs e)        {            int t = Convert.ToInt32(textBox1.Text);//获取输入的数字            List<int> lInt = new List<int>();            for (int i = 1; i <= t; i++)                lInt.Add(i);            lInt = js(1, 0, lInt);//运算            foreach (int v in lInt)            {                textBox2.Text += v + "\t";//输出结果            }        }

C# code
/// <summary>        ///         /// </summary>        /// <param name="i">报数</param>        /// <param name="index">value下标</param>        /// <param name="value"></param>        /// <returns></returns>        private List<int> js(int i, int index, List<int> value)        {            if (value.Count < 3)                return value;            if (i == 3)            {                value.RemoveAt(index);                return js(i++, index, value);            }            else            {                index++;                if (index >= value.Count)                    index = 0;                return js(i++, index, value);            }        }


[解决办法]
探讨

C# code
if (lastNum < num)
{
if (num % 3 == 2)
{
Response.Write((++lastNum).ToString() + "、" + (++lastNum).ToString());
}
else
{
Response.Write((++lastNum).ToString());
}
}
else
{
Response.Write((--lastNum).ToString() + "、" + (--lastNum).ToString());
}
[/code]

读书人网 >C#

热点推荐