Thursday, July 2, 2015

10774 - Repeated Josephus

#include <iostream>
//10774 - Repeated Josephus
using namespace std;
int Josephus(int n,int k)
{
    if(n==1)
        return 1;
    else return (Josephus(n - 1, k) + k-1) % n + 1;
}

void RepeatedJosephus(int caseNo,int n)
{

    int counter=0;
    do
    {
        int result=Josephus(n,2);

        //cout<<result<<endl;
        if(result==n)
        {
            break;
        }
        else
        {
            counter++;
            n=result;
        }
    }while(1);

    cout<<"Case "<<caseNo<<": "<<counter<<" "<<n<<endl;
}

int main()
{
    int caseN;
    cin>>caseN;
    for(int i=0;i<caseN;i++)
    {
        int n;
        cin>>n;
        RepeatedJosephus(i+1,n);
    }
return 0;
}

No comments:

Post a Comment