js解决N个人围成一圈,第一个人从1开始报数,报到M的人出列,求最后一个出列的人的编号。
2016-11-08 23:54
363 查看
js解决N个人围成一圈,第一个人从1开始报数,报到M的人出列,求最后一个出列的人的编号。
下面是用js实现的代码<!DOCTYPE html> <html lang="en"> <head> <title> new document </title> <meta charset="utf-8"> <style> </style> </head> <body> <script> <span style="white-space:pre"> function find(n, m) { //定义一个输出最后一个人下标的方法,两个参数 n表示总人数,m表示报的数 var arr = []; //定义一个空数组 for (var i = 0; i < n; i++) { arr[i] = true; //建立一个可以有n元素的数组,用来模拟报数的总人数 数组中值为true的表示剩下的人,false表示出去的人 } var total = n, index = 0, count = 0; //定义三个变量total剩下的的人数,index表示数组的下标,count表示从从0-m报的数的下标 //循环,直到剩下一个人 while (total > 1) { if (arr[index] == true) { count++; //如果数组中的值为true,那么从conut+1 if (count == m) { //判断报数的人的数是否为m,如果为m, count = 0; // 那么重置count计数器 arr[index] = false; //报m的人出去,即将他的值改为false total--; //将剩下的人数-1 } } index++; //下标+1 if (index == arr.length) { //如果到了最后一人, index = 0; //重置下标为0 } } //循环结束 //遍历整个数组 for (var i = 0; i < arr.length; i++) { if (arr[i] == true) { //值为true的人就是剩下的最后一个人 return i + 1; //因为数组下标是从0开始的,而报数是从1开始的,所以剩下的那个人报的数为数组下标+1 } } return -1; //如果没有返回-1 } console.log(find(7, 2)); //调用find()方法</span> </script> </body> </html>
相关文章推荐
- 有N个人围成一圈,第一个人从1开始报数,报到M的人出列,求最后一个出列的人。
- 有N个人围成一圈,第一个人从1开始报数,报到M的人出列,求最后一个出列的人
- 有n个人围成一圈编号1~n,顺序排好,从第一个人开始1到3报数,凡是报到3的人退出圈子,C语言编程出圈顺序
- 当当笔试题(有n个人成一圈,顺序排号(编号为1到n),从第一个人开始报数1到3报数),凡报到3的人出圈子,从下个人开始继续报数,直到最后一个人,问最后留下在是第几号?)
- Java解决有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
- C语言:有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3),凡报到3的人退出圈子,问最后一个留下的是原来的第几号的那位?
- 有n个人围成一圈,顺序编号,从第一个人开始报数,凡报到3的人出圈,编写程序,问最后留下的是原来第几号的那位?
- C语言 约瑟夫圈问题:N个人围成一圈,从第一个人开始按顺序报数并编号1,2,3,……N,然后开始从第一个人转圈报数,凡是报到3的退出圈子。则剩下的最后一个人编号是多少。
- 有n个人围成一圈,从第1个人开始,1、2、3报数,报至3出局,余下的人继续从1、2、3报数,问:最后剩下的一人是原来的第几号?同时求出被淘汰编号的序列。(要求:用循环队列解决该问题。)
- 【转】 小算法:n个人围成一圈,从第一个人开始报数,报到3的倍数的退出,一直到剩下最后一个人
- 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
- Java编程之有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子
- 设有n个人依围成一圈,从第1个人开始报数,数到第m个人出 列,然后从出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所 有的人全部出列为止。设n个人的编号分别为1,2,…,n,打印出出列的顺
- 有n个人围成一圈,顺序排号,从第一个人开始报数(从1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号。
- 面试题:有20个人围成一圈,顺序排号。从第一个人开始报数(从1到3报 数),凡报到3的人退出圈子
- 有n个人围成一圈,顺序排号。从第一个人开始报数(从1~3报数),凡报到3的人退出圈子,问最后留下的人原来是第几号
- 有15个人围成一圈,顺序排号。从第一个人开始报数(从1~3报数),凡报到3的人退出圈子,问最后留下的人 C#版
- 有17个人围成一圈(编号为0~16),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止。问此人原来的位置是多少号?
- 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出
- Java有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下 的是原来第几号的那位。