出圈问题

题目:50个人围城一圈数到3和3的倍数时出圈,问剩下的人是谁?原来的位置是多少?

重复循环使用取余的方法:

 1 import java.util.LinkedList;
 2 import java.util.List;
 3
 4
 5 public class Main {
 6     public static void main(String[] args) {
 7         System.out.println("该数字原来的位置是:" + cycle(50, 3));
 8     }
 9
10     public static int cycle(int total, int k){
11         List<Integer> dataList = new LinkedList<>();
12         for(int i = 0; i< total;i++){
13             dataList.add(i+1);
14         }
15         int index = -1;
16
17         while(dataList.size() > 1){
18             index = (index + k) % dataList.size();
19             /*
20              * 当删除一个元素后,由于dataList中后面元素的下标都减一,所以index也需要减一
21              * 元素为:    1 2 3 4 5 6 7
22              * 下标为 :   0 1 2 3 4 5 6 index=2时,删除第3个元素
23              * 下标变为    0 1   2 3 4 5  index需要退回删除元素的前一个位置所以(index--)
24              *
25              */
26             dataList.remove(index--);
27         }
28         return dataList.get(0);
29     }
30 }
时间: 2024-10-14 05:10:59

出圈问题的相关文章

Java简单算法--出圈问题

package cn.magicdu.algorithm; import java.util.LinkedList; import java.util.List; /** * 出圈问题,数到某个数字的倍数就出圈,打印最后剩下的元素的原来位置 * * @author xiaoduc * */ public class Circle { public static void main(String[] args) { System.out.println("剩下元素原来的位置"+cycle

约瑟夫环问题(100围坐一圈报数,报3出圈)

100个人编号1-100,围坐一圈,从1号开始进行1,2,3报数,谁报数为3,就离开圈子,剩下的人继续报1,2,3,报数为3的出圈... 请写一段程序,计算最后一个留下来的人,他的编号 1 package com.ycl.test; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class Test1 { 7 public static void main(String[] args) { 8 int co

一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈

一 群猴子排成一圈,按1,2,…,n依次编号.然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的 进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王.要求编程模拟此过程,输入m.n, 输出最后那个大王的编号 <?php //$n猴子个数 $m第几个位置 function fn( $n, $m){ //将猴子数量放到数组内 for($i = 1; $i < $n+1; $i++){ $arr[] = $i; } $i = 0; var_d

约瑟夫环-一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈

一群猴子排成一圈,按1,2,-,n依次编号.然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去-,如此不停 的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王.要求编程模拟此过程,输入m.n, 输出最后那个大王的编号(约瑟夫环). function fuhuan($allnum, $ti){ $arr = array(); for($i = 0; $i < $allnum; $i++){ $arr[$i] = $i; } $nums = 1; whi

BZOJ2976 : [Poi2002]出圈游戏

首先模拟一遍得到n个同余方程,然后用扩展欧几里得求出最小的可行解即可,时间复杂度$O(n^2)$. #include<cstdio> #define N 30 int n,i,j,k,x,y,a[N],b[N],d[N],ans; namespace Solve{ int flag=1,k=1,m=0,d,x,y; int exgcd(int a,int b,int&x,int&y){ if(!b)return x=1,y=0,a; int d=exgcd(b,a%b,x,y)

5、题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 思路:n长度的数组,boolean类型。出圈置为false,当最后只有一个true的时候,就是留下来的人。

public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入人的个数n:"); int n = sc.nextInt(); fun(n); sc.close(); } private static void fun(int n) { boolean[] ps = new boolean[n]; int co

题目:50个人围城一圈数到3和3的倍数时出圈,问剩下的人是谁?原来的位置是多少?

重复循环使用取余的方法: 1 import java.util.LinkedList; 2 import java.util.List; 3 4 5 public class Main { 6 public static void main(String[] args) { 7 System.out.println("该数字原来的位置是:" + cycle(50, 3)); 8 } 9 10 public static int cycle(int total, int k){ 11 L

100个小孩排成一圈,从第一个小孩开始1至3报数,凡报为3的小孩从圈中出来,,求最后出圈的小孩的顺序号是多少

package com.tfj.algorithm; import java.util.ArrayList; import java.util.List; public class TheLast { public static void main(String[] args) { List list = new ArrayList(); for (int i = 1; i <= 100; i++) { list.add(i); } int point = 0, number = 1; whil

50个人围成一圈数到3和3的倍数时出圈,问剩下的人是谁?在原来的位置是多少?

参考答案: <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title></title></head><body> <script> var N = 50; var m = 3; var array = []; for (var i = 0; i < N; i++) { arra