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++) {            array[i] = i + 1;        }

        loop(array, []);

        function loop(arr1, arr2) {            var before = arr1.concat(arr2);            var after = [];            for (var i = ((arr2.length == 0) ? 0 : arr1.length); i < before.length; i++) {                if ((i + 1) % m != 0) {                    after.push(before[i]);                }            }

            if (after.length < 2) {                console.log("在原来的位置是: " + after.join());            } else {                loop(before, after);            }        }    </script></body></html>

在原来的位置是: 11
时间: 2024-10-29 14:34:23

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

题目: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

Java实现约瑟夫环:50个人围成一圈数数,数到3的人退出,求最后剩下的人的编号

public class Main { public static void main(String[] args) { //50个人,从第一个人开始数,数到3的人出列 countThree(50, 0, 3); } /** * 约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围. * 从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数, * 数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列. * * @param n 人的总数 * @

10.5 有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。

有n人围成一圈,顺序排号.从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位. #include <stdio.h> int main(){ int num[50]; int * p,n,i; p=num; printf("输入人的数目n="); scanf("%d",&n); //为每人赋初始的序号 for(i=0; i<n; i++){ *(p+i)=i+1; } int m=0,j=0,k=0;

java例题_37 有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子, 3 问最后留下的是原来第几号的那位。

1 /*37 [程序 37 报数] 2 题目:有 n 个人围成一圈,顺序排号.从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子, 3 问最后留下的是原来第几号的那位. 4 */ 5 6 /*分析1====错误分析,没有注意到要退出圈子!!! 7 * 1.用一个数组存放n个1,从头开始报数 8 * 2.声明一个计数器,报数为3时,数组中的数赋为0,计数器重置 9 * 3.一直直到还剩下最后一个不为0的数,这个数的角标加1就是原来的几号 10 * 11 * 分析2:----利用A

C语言——N个人围成一圈报数淘汰问题

<一>问题描述: 有17个人围成一圈(编号为0-16),从第 0号的人开始从 1报数, 凡报到 3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止. 问此人原来的位置是多少号? <二>问题解决: 1.定义数组记录每个编号的状态(是否被淘汰): 2.在未被淘汰的人中检查是否数到3,若是,淘汰此人: 3.继续此过程至所有人被淘汰: <三>示例代码: 1 /* 2 16.有17个人围成一圈(编号为0-16),从第 0号的人开始从 1报数, 3 凡报到 3的倍数的人离

一群人围成一圈从123报数,如果报到3就退出该圈中,直到最后一个人留下来!

package com.pb.demo1; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 一群人围成一圈从123报数,如果报到3就退出该圈中,直到最后一个人留下来! * 约瑟夫的游戏 */ public class Demo1 { public sta

一群猴子排成一圈,按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

找猴王:15只猴子围成一圈从1报数到7的出局,最后谁是猴王。

第一种: package 找猴王; public class Test { public static void main(String[] args) { int n=15;//15只猴子 int m=7;//数到7的就出局 int count=1;//count为计报数的值,从1开始,7结束 int size=n;//size的值从15变到1,到1时就找到了猴王(每数到7的就出局所以会最终剩余1) int[] a = new int[n];//定义一个数组存放15个猴子的编号(1--15的编