首页 > 其他分享 >小孩数数 击鼓传花 约瑟夫环 丢手绢

小孩数数 击鼓传花 约瑟夫环 丢手绢

时间:2022-10-24 17:24:14浏览次数:39  
标签:数数 num people shift 约瑟夫 传花 let result names

问题描述

一般经常是以这样的形式出现的:

有30个小孩儿,编号从1-30,围成一圈依此报数,1、2、3 数到 3 的小孩儿退出这个圈, 然后下一个小孩 重新报数 1、2、3,问最后剩下的那个小孩儿的编号是多少?

或者我们可以看到约瑟夫环击鼓传花丢手绢
这些问题都是换汤不换药,同属于一类问题

思路分析

初读完题目能够想到什么,从一些关键字眼我们就可以大概推断出可能会用什么。

  • 每次都重复123,可能会用到循环
  • 当只有一个孩子时停止报数,可能用到while
  • 同一个数字可能会数多次

我们可以考虑使用队列的方式去实现

  • 每次数完,如果不符合就将它放到队尾
  • 将符合条件的删除

可以在本子上画一画具体的过程

核心代码

 while (result.length > 1) {
    for (let i = 1; i < num; i++) {
      result.push(result.shift())
    }
    result.shift()
  }

完整代码

const passGame = (names, num) => {
  let result = [...names]
  while (result.length > 1) {
    for (let i = 1; i < num; i++) {
      result.push(result.shift())
    }
    result.shift()
    // console.log(`${result.shift()}被删除了`)
  }
  //索引是从0开始
  return names.indexOf(result[0]) + 1
}
//生成数字数组,如果其他需要我们可以替换数组内容
let people = []
for (let i = 1; i < 11; i++) {
  people.push(i)
}
console.log(passGame(people, 3))

标签:数数,num,people,shift,约瑟夫,传花,let,result,names
From: https://www.cnblogs.com/zx529/p/16822137.html

相关文章

  • mysql函数 字符长度限制_MySQL中使用group_concat()函数数据字符过长报错的问题解决方
    selectGROUP_CONCAT(uid)asuids,spread_uidfromeb_user_spreadwhereuid<>spread_uidGROUPBYspread_uid使用GROUP_CONCAT函数将字符串连接起来,数据量大的时候,会......
  • 数据集 | 2001-2019年中国商品零售价格指数数据集
    下载数据集请登录爱数科商品零售价格指数(RPI)是指反映一定时期内商品零售价格变动趋势和变动程度的相对数(基准值为100),涵盖食品、饮料烟酒、服装鞋帽、纺织品、中西药品、化......
  • 扩展约瑟夫问题
    看到具体数学上面写了就手推一下定义:\[f(x)=\alpha_x(1\leqx<a),\]\[f(ax+l)=bf(x)+\beta_l(0\leql<a,x\geq1)\]求证:\[f((c_mc_{m-1}...c_......
  • 给定一个整数数组 nums 和一个整数目标值 target,请在该数组中找 和为目标值 target 的
    给定一个整数数组nums和一个整数目标值target,请在该数组中找和为目标值target的三个整数,并返回它们的数组下标#第一种:通过for循环遍历实现classFoo(object):......
  • 数数
    题目描述CuberQQ和CuberCC在无聊时喜欢通过写数字来检验他们两的默契程度。假设CuberQQ写的数是$X$,CuberCC写的数是Y。当$X$的最高位等于$Y$的个位,且$Y......
  • 循环链表(约瑟夫环)思路及实现
    循环链表单链表的尾节点指向首节点,即可构成循环链表约瑟夫环约瑟夫问题:有N个人围成一圈,每个人都有一个编号,编号由入圈的顺序决定,第一个入圈的人编号为1,最后一个为N......
  • 不同的二叉搜索树的种数数量 C/C++ 动态规划
    #if 0class Solution {public:    int numTrees(int n) {        vector<int> s(n+1);   // 取值范围有n个数,取n个数范围内的任意一个树做根......
  • 约瑟夫环相关问题
    与力扣 圆圈中最后剩下的数字类似:https://leetcode.cn/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/将环加入数组中,每次计算index=(index+m-1)%......
  • 约瑟夫问题(二)
    代码实现 //根据用户的输入,计算出小孩出圈的顺序 /** * *@paramstartNo *表示从第几个小孩开始数数 *@paramcountNum *......
  • 约瑟夫问题
    简介设编号为1,2,…n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人......