1. 程式人生 > >簡單約瑟夫環模板(C++版)

簡單約瑟夫環模板(C++版)

hdu2211

#include <bits/stdc++.h>
using namespace std;
int t;
long long n,k;
//函式返回的就是勝利者編號
long long cir(long long n,long long m){
    //遞迴邊界
    if(n==k){
        return k;
    }
    //一輪過去後剩下n-n/k人
    //x就是下一輪也就是最後勝利者的編號
    long long x=cir(n-n/k,k);
    //在這一輪的編號t=(x-1)-(x-1)/k+1再化簡
    return (
x-1)/(k-1)+x; } int main(void){ scanf("%d",&t); while(t--){ scanf("%lld%lld",&n,&k); printf("%lld\n",cir(n,k)); } return 0; }