日期:2014-05-18  浏览次数:20792 次

分享一个面试题
输入任务一个大于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]