您的位置:首页 > 其它

文章标题

2015-12-03 14:51 459 查看

Josephus problem

Josephus problem
Problem Description

Solution
General caseRecursion formula

Special casem 2

Reference1

Problem Description

Solution

General case:Recursion formula

Suppose we number the position from 0 to n−1

g(n,m)=(g(n−1,k)+k)mod n,with g(1,k)=0

This is my codes:

#include <iostream>
using namespace std;
int josephus_Recursion(int n,int m)
{
if(n == 1)
return 0;
else
return (josephus_Recursion(n-1,m)+m)%n;
}
int main()
{
int n,m;
cin >> n >> m;
cout << josephus_Recursion(n,m);
}


Special case:m = 2

Suppose we number the position from 1 to m

J(2n)=2J(n)−1

J(2n+1)=2J(n)+1

So,in general

J(n)=2(J(n)+n

This is my codes:

#include <iostream>
using namespace std;
int josephus_Special(int n,int m=2)
{
if (n==1)
return 1;
else
return 2*(josephus_Special(n/2)+n%2)-1;
}

int main()
{
int n,m;
cin >> n >> m;
cout << josephus_Special(n,m)<<endl;
return 0;
}


Reference1

https://en.wikipedia.org/wiki/Josephus_problem
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: