有100个学生,一次数数,1,2,3,数到3的退出,其余接着数,知道最后剩一个人,那个人是谁

sc870221 2010-12-28 09:31:13
有100个学生,一次数数,1,2,3,数到3的退出,其余接着数,知道最后剩一个人,那个人是谁
我用嵌套循环 但是陷入死循环 求指教!
...全文
396 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
dylike 2010-12-29
  • 打赏
  • 举报
回复
(100 mod 3)-1
在路上20130607 2010-12-29
  • 打赏
  • 举报
回复
可以试试 少弄几个 比如5个学生 从2开始 调试起来方便点
laj0600310219 2010-12-29
  • 打赏
  • 举报
回复
你用个循环链表来做应该比较简单啊(数组也行)。。。数到3就把对应的节点删掉就可以了。。。。
cjh200102 2010-12-29
  • 打赏
  • 举报
回复
每次叫到3的记录一下,再进行下一轮
bourbon1795 2010-12-29
  • 打赏
  • 举报
回复
原来 最后两个数字 是58 和 91 最后一步出错了。。。。
bourbon1795 2010-12-29
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 wuyazhe 的回复:]

C# code
private static void TestRollCall()
{
var q = Enumerable.Range(1, 100).ToList();
int i = 0, j = 0;
while (q.Count > 1)
{
if (i++ == 2)
{
q.RemoveAt……
[/Quote]
奇怪 为什么我算的是58
cdglynn 2010-12-29
  • 打赏
  • 举报
回复
嗯,挺有意思,别找现成代码了,自己想想,不可能想不出来
zerodegrees 2010-12-29
  • 打赏
  • 举报
回复
约瑟夫环,挺有意思的题目。
虽然挺简单的。
sagaspog 2010-12-29
  • 打赏
  • 举报
回复
 #region 开始判定值是否为3

for (i = 0; r != 99; i++)
{
if (i == 100)
i = 0;
if (L == 4)
L = 1;
switch(Q[i])
{
case 1:
Q[i]=L;
L++;
break;
case 2:
Q[i]=L;
L++;
break;
case 3:
Q[i]=4;
r++;
break;
case 4:
break;
}
}
#endregion



。。。这样就对了。。我刚才输出了100个成员 90为1 其他为4

。。。我好傻。。。
sagaspog 2010-12-29
  • 打赏
  • 举报
回复
。。。5555

我错的好离谱

deyygywxf 2010-12-29
  • 打赏
  • 举报
回复
private static void TestRollCall()
{
var q = Enumerable.Range(1, 100).ToList();
int i = 0, j = 0;
while (q.Count > 1)
{
if (i++ == 2)
{
q.RemoveAt(j);
i = 0;
j--;
}
j = (j + 1) % q.Count;
}
Console.WriteLine(q[0]);
}
兔子-顾问 2010-12-29
  • 打赏
  • 举报
回复
private static void TestRollCall()
{
var q = Enumerable.Range(1, 100).ToList();
int i = 0, j = 0;
while (q.Count > 1)
{
if (i++ == 2)
{
q.RemoveAt(j);
i = 0;
j--;
}
j = (j + 1) % q.Count;
}
Console.WriteLine(q[0]);
}
xxzhanggood 2010-12-29
  • 打赏
  • 举报
回复
为什么
xxzhanggood 2010-12-29
  • 打赏
  • 举报
回复
当然是1啦
兔子-顾问 2010-12-29
  • 打赏
  • 举报
回复
ls结果对么?
sagaspog 2010-12-29
  • 打赏
  • 举报
回复
。。。。。上面写错一个地方

是这样的 碰到3的时候我们给他赋值为4 然后累加器+1
并且将下一个数组成员赋值

当我们碰到4时 其实也就是我们应该剔除的那一项
还是将下一个数组成员赋值

然后 当累加器等于99时 也就是我们100数组成员只有1个不为3了
。。。。谁能帮我看看这种方法是不是弄错了。。
lkr2380869 2010-12-29
  • 打赏
  • 举报
回复
老考算法咯
sagaspog 2010-12-29
  • 打赏
  • 举报
回复

public static string X()
{
int L=1;
int r=0;
int i;
int[] Q = new int[100];

#region 给MATH数组赋值 1-3
for(i=0;i<100;i++)
{
if(L==4)
L=1;
Q[i]=L;
}
#endregion

#region 开始判定值是否为3
//我是这样想的,0-99 100个数 开始判断 如果值为3那么 直接跳到下一个数然后赋值
//值的计数器为L L在1-3中循环
//加入一个计算值不为3的数的计数器 当计数器=99时那么就一个不为3的数了
for (i = 0; r!=99; i++)
{
if (i == 100)
i = 0;
if (L == 4)
L = 1;
if (Q[i] == 3)
{
Q[i] = 4;
i++;
Q[i] = L;
r++;
}
else
if (Q[i] == 4)
{
i++;
Q[i] = L;
}
else
{
Q[i] = L;
}
L++;
}
#endregion
return i.ToString()+"\r\n"+Q[i];

}


答案计算下来是I=43 Q[I]=1;
也就是说第44个学生是最后一个;
tyy283 2010-12-28
  • 打赏
  • 举报
回复
呵呵..
bourbon1795 2010-12-28
  • 打赏
  • 举报
回复
约瑟夫环
陷入死循环,原因可能是,没有考虑,退出数字对序列的影响。
加载更多回复(3)

110,535

社区成员

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

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

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