• 约瑟夫环问题


    约瑟夫环是这样的描述:有n个孩子围坐成一圈,编号为0~n-1。现在让这些孩子报数,从0~m-1依次报数。报到m-1的孩子退出圈。求最后留在圈里的孩子。

    下面直接看这个问题的数学解法:

    上面的数学推到已经完成了,所以代码实现:

    //n代表有多少人在玩这个游戏
    //m代表报数的范围是0~m-1
    int LastRemaining_Solution(unsigned int n, unsigned int m)
    {
    	if(n == 0)
    	{
    		return -1;
    	}
    	
    	int s = 0;
    	if(n == 1)
    	{
    		return s;
    	}
    	
    	for(int i = 2; i <= n; i++)
    	{
    		s = (s + m) % i;
    	}
    	
    	return s;
    }
    

    注意这种算法中每个人的编号不是一成不变的,每淘汰一个人,都要把这个人的下一个人当成是0号位置,对所有的人重新编号。

  • 相关阅读:
    Mysql高手系列
    Mysql高手系列
    Mysql高手系列
    Mysql高手系列
    Mysql高手系列
    Mysql高手系列
    Mysql高手系列
    Mysql高手系列
    Mysql高手系列
    Mysql高手系列
  • 原文地址:https://www.cnblogs.com/stemon/p/4884942.html
Copyright © 2020-2023  润新知