您的位置:首页 > 其它

uva 305 Joseph

2013-05-13 20:38 381 查看
需要注意的是:必须先将15以前的都计算好,然后直接输出,如果输入一次计算一次就会TLE。(uva上测试数据不超过15,所以计算15以前就AC了)

#include<iostream>
#include<cstring>
using namespace std;
bool joseph(int k,int m)
{
int i,a=(m-1)%(2*k),n=2*k;
for(i=1; i<k; ++i)
{
a=(a+m-1)%(n-i);
if(a<k)return false;
}
return true;
}
int main()
{
int k,m,num[20];
for(k=1; k<15; ++k)
{

int i,j,flag=0;
for(i=0;; ++i)
{
for(j=k; j<2*k; ++j)
{
m=2*k*i+j+1;
if(joseph(k,m))
{
flag=1;
break;
}
}
if(flag)break;
}
num[k]=m;
}
while(cin>>k)
{
if(k==0)
break;
cout<<num[k]<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: