【约瑟夫环】poj 1012 Joseph

/*
poj 1012 Joseph
题意:约瑟夫问题,要求后k个数比前k个数先删除,求最小的m。
题解:暴力。。。
k不多,把答案存下,就不会超时。
*/
#include 
#include 
#include 
#include 
using namespace std;
const int N = 110;

int n;
int a[N];
int main()
{
    int k;
    while(cin >> k && k)
    {
        if(a[k])
        {
            printf("%d\n",a[k]);
            continue;
        }
        n = k*2;
        int m;
        for(m = k+1; ; m++)
        {
            int i;
            int s = 0;
            for(i = 0; i < k; i++)
            {
                s = (s+m-1)%(n-i);
                if(s < k)
                    break;
            }
            if(i == k)
                break;
        }
        a[k] = m;
        printf("%d\n",m);
    }
    return 0;
}

你可能感兴趣的:(杂题)