zoukankan      html  css  js  c++  java
  • 数组——约瑟夫问题

       求解约瑟夫问题:设有n个人站成一个圈,其编号为1——n,从编号为1的人开始顺时针“1,2,3...”循环报数,数到m的人出列,然后从出列者的下一个重新开始报数,数到m 的人又出列,如此重复进行下去,直到n个人都出列为止。要求输出这n个人的出列顺序。


      算法思路:采用一维数组p[],先将n个人的编号存入p[0]——p[n-1]。从编号为1的人(下标t=0)开始循环报数,数到m的人(下标t=t+m-1%i),输出p[t]并将其从数组中删除,(即将后面的元素前移一位),因此每次报数的起始位置就是上次报数的出列位置,反复执行下去。

    算法如下:

    void josephus(int n,int m)
    {
    	int *p;
    	p=new int [MaxSize];
    	int i,t=0,j;
    	for(i=0;i<n;i++)
    	{
    		p[i]=i+1;
    	}
    	for(i=n;i>0;i--)
    	{
    		t=(t+m-1)%i;
    		cout<<p[t]<<" ";
    		for(j=t+1;j<i-1;j++)
    		{
    			p[j-1]=p[j];
    		}
    	}
    	cout<<endl;
    	delete []p;
    }


  • 相关阅读:
    类的专有方法(__getitem__和__setitem__)
    类的专有方法(__len__)
    demo02
    python之函数用法__str__()
    repr
    类的专有方法(__repr__)
    类的专有方法(__del__)
    类的专有方法(__init__)
    静态方法
    Golang接口简单了解
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3313342.html
Copyright © 2011-2022 走看看