import java.util.ArrayList;
/**
* @author WenQiang Wu
* @version Dec 28, 2009
*/
public class Count3Quit {
static int m = 0;
public static void main(String args[]) {
ArrayList<Integer> a = new ArrayList<Integer>();
for (int i = 1; i <= 500; i++) {
a.add(i);// 把每个小朋友的号码依次放入.
}
while (a.size() > 1) {
// 当a.size()==1就只有一个人了,也就没必要循环了,那就是最后一个了
for (int i = 0; i < a.size(); i++) {
m++; // 相当于报数
if (m % 3 == 0) { // 数到三的人退出
m = 0;
a.remove(i);
i--;
// 删掉了当前结点,后面的结点就会前移,就是索引会-1,
// 下一轮循环该从第i个开始,也就是现在的第i+1个人就是下一轮循环的第i个人
}
}
}
System.out.println("最后一个小朋友的号码是: " + a.get(0));
}
}
分享到:
相关推荐
500人围成一个圈 数到3的人下个人就从1开始数 最后一个人的位置在那里 //小孩玩游戏,手拉手围成一个圈,然后数数.每次数到3的时候这个小孩退出,下一个从1开始再数. //试问,如果有500个小孩,最后剩下的小孩是原来的...
n个人围成一圈 从1开始数 数到k的人出去 接着从1开始数 数到k出去 最后出来的人是谁 c语言程序设计教程(第二版)谭浩强 经典例题 对于学习c语言有很大帮助
约瑟夫问题的基本描述如下:N个人围成一个圈,从第一个人开始顺时针报数,每数到M(M小于N)的那个人将被排除,然后从被排除人的下一个位置继续报数,直到所有人全部出列。问题的目标是找出所有人的出列顺序。 解决...
用队列求解:100个人围成一圈,从第一个人开始报数,报3的被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。
在问题描述中,n个人围成一个圈,每个人都有一个唯一的编号1到n,并且有一个报数上限m。从第一个人开始顺时针报数,报到m的人出列,然后从下一个人继续报数,新的m值变为出列者的密码。这个过程一直持续到所有人都...
3. 淘汰后,从下一个人继续开始报数,直到只剩下最后一个人为止。 要实现这个算法,我们可以创建一个大小为N的循环数组,代表圈中的每个人。数组的索引可以用来表示每个人的编号,从0到N-1。然后设置一个指针,指向...
接着仍沿顺时针方向从被淘汰出局者的下一人员又 重新从 1 开始数起,数到 k 后,淘汰第 2 个人;如此继续,直到最后剩下一个人时停止。请输出 最后所剩那一个人的编号,并输出淘汰过程的某种“中间结果数据”。
在问题中,M个人按照顺时针方向围成一个圆圈,从某个人开始编号为1,然后从1开始依次报数,每数到N的人就会离开圈子,然后从下一个人继续从1开始报数,直到只剩下最后一个人为止。这个问题的目标是找出最后留在圆圈...
在这个特定的版本中,n个死囚犯围成一圈,每个人都被赋予了一个从1到n的编号,他们从1开始依次报数,每当报到m的人就会被处决,然后从下一个人继续报数,这个过程一直持续,直到只剩下最后一个囚犯。 解决这个问题...
N个人围成一圈,从第一个人开始按顺序报数并编号1,2,3,……N,然后开始从第一个人转圈报数,凡是报到3的退出圈子。则剩下的最后一个人编号是多少。 定义一个类,然后在类前定义一个结构体 2、在类中定义一个链表...
约瑟夫问题是指 N 个人围成一圈,从第一个人开始报数,数到 M 的人出圈;再由下一个人重新开始报数,数到 M 的人出圈;…输出依次出圈的人的编号。N,M 由键盘输入。 在这个源代码中,我们使用了队列来模拟约瑟夫...
这个问题要求我们模拟一个游戏,其中n个人围成一个圈,从第一个人开始按照1到m的顺序报数,每报到m的人就退出圈子,直到只剩一个人为止。我们要找出最后留在圈子里的人原来的编号。 在Python中,我们可以使用列表来...
题目要求设计一个C语言程序,使得n个人围成一圈,并从1号人员开始数起,数到k时淘汰出局,接着从淘汰者的下一个开始数起,如此继续直到最后剩下一人为止。 在设计这个程序时,我们需要考虑如何使用数组来存放数据...
假设从第s个人开始,每个人从1数到m,凡是数到m的人就出圈(即离开游戏),然后从他下一个人继续从1开始数数。这个过程持续进行,直到所有人全部出圈为止。我们需要找出最后一个人相对于起始位置的偏移位置。 #### ...
接着,指定一个整数m作为计数步长,游戏规则是从第一个人(即编号为1的人)开始,按顺时针方向报数,每数到第m个人就将此人移除出圆圈,然后从下一个人继续开始计数,直到只剩下最后一个人为止。 #### 二、问题分析...
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。 分析: (1)由于对于每个人只有死和活两种...
题目描述了一个场景:n个人围成一个圈,从第一个人开始报数,数到第m个人则这个人出列,之后从下一个继续报数,直到所有人都出列为止。题目要求输出每个人出列的顺序。 ### 2. 数据结构选择 #### 循环链表 - **定义...
在本问题中,13个人围成一个圈,从第一个人开始依次报数:1、2、3,每当数到3的人就要退出这个圈子。游戏继续进行直到只剩下最后一个人,即为胜利者。本问题的目标是通过链表数据结构来模拟这一过程,并找到最终留在...
假设有一群人围成一个圈,从第一个人开始依次报数,每当数到特定值(例如3)的人就要离开圈子,然后从下一个人继续报数,直到只剩下最后一个人为止。这个问题也被称为"约瑟夫环"问题,源于一个古老的犹太故事。 在...
该问题的基本设定是:有N个人按照顺时针方向围成一个圆圈,从第一个人开始依次报数,每数到M的人会被剔除出圈,然后从下一个人继续开始报数,直至只剩下最后一个人为止。在给定的例子中,N=6,M=5,根据规则,报数5...