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语言有很大帮助
然后从第一个人开始顺时针自1开始报数,报到m的人出列,将其密码作为新的m值,从他的下一个人开始,同样顺时针自1开始报数,依次循环下去,直到所有的人都出列!要求得到依次出列的那些人的编号序列! 基本要求: 用...
用队列求解:100个人围成一圈,从第一个人开始报数,报3的被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3。
一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从下一个人开始重新从1开始报数,如此下去,直至所有人全部出列为止。...
N个人围成一圈,从第一个人开始按顺序报数并编号1,2,3,……N,然后开始从第一个人转圈报数,凡是报到3的退出圈子。则剩下的最后一个人编号是多少。 定义一个类,然后在类前定义一个结构体 2、在类中定义一个链表...
Josehus问题算法 设有N个人围坐一圈,现从某人开始报数, 数到M的人出列,接着从出列的下一个人重新报数,数到M的人又出列,如此下去直到所有人都出列为止,给出他们的出列次序。
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。 分析: (1)由于对于每个人只有死和活两种...
接着仍沿顺时针方向从被淘汰出局者的下一人员又 重新从 1 开始数起,数到 k 后,淘汰第 2 个人;如此继续,直到最后剩下一个人时停止。请输出 最后所剩那一个人的编号,并输出淘汰过程的某种“中间结果数据”。
看了挺多博客感觉都挺复杂的,自己写这个自认为比较简单,也更灵活,希望可以帮到需要的人,... circle.append(circle.pop(0)) #把已报数的人取出放到队尾,以此实现围成圈循环往复 num+=1 if num==m: del circle[0]
M个人围成一圈报数,数到N(1)的倍数或包含N这个数字时出圈,问剩下的最后一个人在原来的位置是多少? 报数规则 1、从第一个人开始报数为1,下一个人报数为上一个人报数加1 2、报数的最大值为2000,如果报数超过...
有M个人围成一个环,然后数到N的是否第N个人退出,从下一个人开始从一数起,在数到N的时候退出,求最后剩下的这个人是谁
//约瑟夫问题描述:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的人的序号为5,4,6,2,3。最后剩下1号。
# 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
设有n个人围成一圈,现从第s个人开始,拨顺时针方向从1开始报数,数到d的人退出圆圈,然后从退出圆圈的下一个人重新开始报数,数到d的人又退出國圈,依此重复下去,直到最后一个人出圈为止。对于任意给定的n, s和d,...
设有n个人围坐一圈并按顺时针方向报数,设从第s个人开始从1到m报数,凡报数到m的人出圈,再从他的下一个人重新开始从1到m的报数,如此进行下去,直到所有人都出圈为止,并试确定最后一个出圈人相对开始位置的偏移...
C# 海盗杀人事件,把人围成一圈,随便选着,直到留下最后一个人!
简单的约瑟夫环代码约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。 分析: (1)由于对于每个...
约瑟夫问题: 这是 17 世纪的法国数学家加斯帕...法: 30 个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如 此 循环进行直到仅余 15 个人为止。问怎样排法,才能使每次投入大海的都是非教徒。