首页 > 其他 > 详细

约瑟夫问题(猴子选大王)

时间:2015-11-06 22:13:48      阅读:241      评论:0      收藏:0      [点我收藏+]

n只猴子要选大王,选举方法如下:所
有猴子按 1,2 ……… n 编号并按照顺序围成一圈,
从第 k 个猴子起,由1开始报数,报到m时,该猴子就跳出圈外,
下一只猴子再次由1开始报数,
如此循环,直到圈内剩下一只猴子时,这只猴子就是大王。

 

 

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    int m,n;
    cin>>m>>n;
    vector<int> v;
    for(int i=1; i<=m; i++)
    {
        v.push_back(i);
    }
    int t=1;
    while(m>1)
    {    
        t+=n-1;
        t=!(t%m)?m:t%m;
        v.erase(v.begin()+t-1);
        m--;
    }
    cout<<v[0]<<endl;
    return 0;
}

 

其实题目的思想很简单,但是花了两个多小时才完成!!!

突破口1:一点点数学技巧

突破口2:使用vector容器

 

第一次看到题目后就想到了list,折腾了一个多小时还是不行,不得不转变思路。。

于是用了和数组最相近的vector容器,还真就成功了,哈哈!!

 

约瑟夫问题(猴子选大王)

原文:http://www.cnblogs.com/fengyanlover/p/4943670.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!