分享一个面试题

xiaohong 2012-03-14 10:40:39
输入任务一个大于0的数字n,从1到n,报数1 2 3,1 2 3,1 2.....每报到三的人出列,依次循环,直至剩下最后一个或两个数字为止,求最后这一个或两个数字是多少?

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

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";//输出结果
}
}

/// <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);
}
}
...全文
129 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qxyywy 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qxyywy 的回复:]

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]
[/Quote]

看到刚才的代码始终觉得不舒服


int num = 38987;
List<int> list = new List<int>();
for (int i = 1; i <= num; i++)
{
list.Add(i);
}
int lastNum = list.FindLast(n => n % 3 == 0);
if (lastNum < num)
{
if (num % 3 == 2)
{
Response.Write((++lastNum).ToString() + "、" + (++lastNum).ToString());
return;
}
Response.Write((++lastNum).ToString());
return;
}
Response.Write((--lastNum).ToString() + "、" + (--lastNum).ToString());
return;
色拉油 2012-03-14
  • 打赏
  • 举报
回复
约瑟夫环
五更琉璃 2012-03-14
  • 打赏
  • 举报
回复
约瑟夫环问题啊 老题了
effun 2012-03-14
  • 打赏
  • 举报
回复
不太明白题目的意思,是要找出已经出列的数字,还是没有出列的,还是没有出列的最后一个或二个?
qxyywy 2012-03-14
  • 打赏
  • 举报
回复

int num = 38987;
List<int> list = new List<int>();
for (int i = 1; i <= num; i++)
{
list.Add(i);
}
int lastNum = list.FindLast(n => n % 3 == 0);
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());
}
qxyywy 2012-03-14
  • 打赏
  • 举报
回复
int num = 38987;
List<int> list = new List<int>();
for (int i = 1; i <= num; i++)
{
list.Add(i);
}
int lastNum = list.FindLast(n => n % 3 == 0);
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());
}
xiaohong 2012-03-14
  • 打赏
  • 举报
回复
上面的 js方法有点小小的错误,在这里重贴出代码
 /// <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(1, index, value);
}
else
{
index++;
if (index >= value.Count)
index = 0;
return js(++i, index, value);
}
}

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧