POJ 1012 约瑟夫环推公式

来源:互联网 发布:清单打印软件免费版 编辑:程序博客网 时间:2024/06/06 01:48
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
    int n,k;
bool ok(int m)
{
    int s=0;
    for(int i=1;i<=k;i++)
    {
        s=(s+(m-1))%(n-i+1);
        if(s<k)
            return 0;
    }
    return 1;
}
int a[20];
int main()
{
    memset(a,-1,sizeof(a));
    while(cin>>k&&k)
    {
        if(a[k]!=-1)
        {printf("%d\n",a[k]);
            continue;}
        n=2*k;
     for(int m=1;m<=3500000;m++)
      {
          if(ok(m))
        {
            printf("%d\n",m);
            a[k]=m;
            break;
        }

      }
    }

}

0 0
原创粉丝点击