报数游戏 有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数, 直到最后剩下一个孩子为止。问剩下第几个孩子。
2013-04-28 21:08
926 查看
/* 报数游戏 有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数, 直到最后剩下一个孩子为止。问剩下第几个孩子。下面的程序以10个孩子为例,模拟了这个过程, 请完善之(提示:报数的过程被与之逻辑等价的更容易操作的过程所代替)。 */ import java.util.Vector; public class 报数游戏 { public static void main(String[] args) { Vector a = new Vector(); for (int i = 1; i <= 10; i++) { a.add("第" + i + "个孩子"); } for (;;) { if (a.size() == 1) break; for (int k = 0; k < 2; k++) a.add(a.remove(0)); // 填空 a.remove(0); } System.out.println(a); } }运行结果:
[第4个孩子]
package test01; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class NumberOff { // 开始报数 public static void numberOff(List lis,int m){ while(lis.size()>1){ for(int i=0;i<m-1;i++) lis.add(lis.remove(0)); lis.remove(0); } System.out.println("剩下最后一个人为:"+lis); } // 输入数据 public static int input(List lis){ Scanner scan = new Scanner(System.in); System.out.print("输入人数:"); int n = scan.nextInt(); // 输入人数 System.out.print("输入报数到 m 出列(m):"); int m = scan.nextInt(); // 输入报数到 m 出列 for(int i=0;i<n;i++) lis.add(i+1); return m; } public static void main(String[] args){ List lis = new ArrayList(); int m = input(lis); // 输入数据 numberOff(lis,m); // 开始报数 } }运行结果:
输入人数:10 输入报数到 m 出列(m):4 剩下最后一个人为:[5]
相关文章推荐
- 有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数,直到最后剩下一个孩子为止。问剩下第几个孩子。
- java 报数游戏:有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到m的人出列
- 面试题 设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数, 报数到第m个人, 此人出圈, 再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现
- 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去....直到剩下
- 有17个人围成一圈(编号为0~16),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止。问此人原来的位置是多少号?
- 华为2013校招之哈工大威海 上机试题之一:报数问题:设有N 个人围坐一圈并按顺时针方向从1 到N 编号,从第S个人开始进行1 到M报数,报 数到第 M个人时,此人出圈,再从他的下一个人重新开始1 到 M的报数,如此进行下去直 到所有的人都出圈为止。现要打印出出圈次序。
- 有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他下一个人重新开始1到m的报数,如此下去直到全部都出圈为止。现要求按出圈次序.给出n人的顺序表
- * 假设有n个人围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人重新开始报数,数到第m个人又出列..... * 如此反复到所有人全部出列为止。设n个人的编号分别为1,2,3..
- 设有n个人依围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个人又出列, …,如此反复到所有的人全部出列为止。设n个人的编号分别为 1, 2, …, n,打印出出
- 有 100 个人围成一个圈,从 1 开始报数,报到 14 的这个人就要退出。然后其他人重新开始, 从 1 报数,到 14 退出。问:最后剩下的是 100 人中的第几个人?
- 设有n个人依围成一圈,从第1个人开始报数,数到第m个人出 列,然后从出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所 有的人全部出列为止。设n个人的编号分别为1,2,…,n,打印出出列的顺
- 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
- n个人围成一圈,从第一个人开始123报数,报到3的离开,问最后剩下的人是第几个?
- 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出, 然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
- 有n个人(1到n号)围成一个圈,从第1号按顺序报数(1-3),每报数为3的人从队伍去除,下个人继续从1开始报数,问最后剩下的那个人原来排在第几位- java
- 有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位
- C语言用数组1. 简单约瑟夫环问题: N个人,编号从1~N围成一圈,输入一个数T,从1号开始报数,报到T的人出圈;下一人又从1开始报数,下一个报到T的人出圈,输出出圈顺序。 考虑问实现约瑟夫环问题
- 18.n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。 求出在这个圆圈中剩下的最后一个数字。
- 有一个单向循环链表队列,从头开始报数,当报到m或者m的倍数的元素出列,根据出列的先后顺序重新组成单向循环链表。
- 2. 题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位. 提示:用数组完成