码迷,mamicode.com
首页 > 编程语言 > 详细

【算法】约瑟夫环 C++源代码

时间:2015-02-13 23:32:35      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:

#include<iostream>
using namespace std;
int main()
{
    int a=17,b=3,winner=0;//总人数a,数到b的倍数离开,最后的人winner
    for(int i=2;i<=a;i++)
        winner=(winner+b)%i;
    cout<<"Winner:"<<winner+1<<endl;
}

 

我们考虑如下过程

1     2     3     4     5     6     …..  k-1  k     k+1  …    n-1  n

第一次编号为k的哥挂掉,然后剩下n-1个人,从k+1号继续.

k+1  k+1  ….n-1 n  1     2     3     4     5     6     ,

序号全部减去k  ,   得到如下序列:

1     2     3     4     5     6…..       n-1  

也就是n-1个人的情况.

假设最后剩下的人,在第(n-1)人的序列中的编号是f(n-1),那么他在n个人的序列中,编号为(k+f(n-1))%n,也就得到了我们的递推公式:

f(n)=(k+f(n-1))%n;

f(1)=1;

http://blog.csdn.net/ice110956/article/details/12906065

【算法】约瑟夫环 C++源代码

标签:

原文地址:http://www.cnblogs.com/bruce27/p/4290958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!