zoukankan      html  css  js  c++  java
  • 约瑟夫环问题

    约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。

    从编号为k的人開始报数,数到m的那个人出列;他的下一个人又从1開始报数。数到m的那个人又出列;依此规律反复下去。直到圆桌周围的人所有出列。求剩下最后的一个人的编号。


    #include "stdafx.h"
    #include<vector>
    #include<iostream>
    using namespace std;
    
    template <class InputIterator, class Distance>
    void advance(vector<int>& i, int n);
    
    vector<int>::iterator do_once(vector<int> &cycle, vector<int>::iterator it, int m)
    {
    	int k = cycle.end() - it-1;
    	if (k >= m)
    	{
    		it = cycle.erase(it + m);
    		if (it == cycle.end())
    			it = cycle.begin();
    		return it;
    	}
    	else
    	{
    		int h = m%cycle.size() - k;
    		if (h>0)
    		{
    			it = cycle.erase(cycle.begin() + m%cycle.size() - k - 1);
    			if (it == cycle.end())
    				it = cycle.begin();
    			return it;
    		}
    		else
    		{
    			it = cycle.erase(it + m%cycle.size());
    			if (it == cycle.end())
    				it = cycle.begin();
    			return it;
    		}
    	}
    }
    
    int Joseph_problem(int n, int k, int m)
    {
    	_ASSERTE(k <= n);
    	vector<int>cycle;
    	vector<int>::iterator it;
    	for (int i = 0; i < n; i++)
    	{
    		cycle.push_back(i);
    	}
    	it = cycle.begin();
    	advance(it, k-1);
    	while (cycle.size() != 1)
    	{
    		it = do_once(cycle, it, m - 1);
    	}
    	return *it+1;
    }
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	/*vector<int>cycle;
    	vector<int>::iterator it;
    	for (int i = 0; i < 4; i++)
    	{
    		cycle.push_back(i);
    	}
    	it = cycle.begin();
    	advance(it, 3);
    	cout << *(it) << endl;
    	
    	cout << *(cycle.erase(it))<< endl;*/
    	
    	cout << 4 % 4 << endl;
    	cout << Joseph_problem(4, 2, 5) << endl;
    	
    	system("pause");
    	return 0;
    }
    


  • 相关阅读:
    自定义滚动条mCustomScrollbar
    怒怼外媒,为中国正名,这个《流浪地球》捧红的犹太小哥太励志了
    Memcached部署和用法
    SpringMVC中向服务器传递时间参数时出现的问题
    spring4 mvc 出错
    【转】ContextLoaderListener 和 DispatcherServlet
    【转】Myeclipse建立Maven项目
    【转】Docker 常用命令
    docker push到本地仓库失败
    转:Docker学习---挂载本地目录
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6905233.html
Copyright © 2011-2022 走看看