2.2.2 Joseph

来源:互联网 发布:mac 查看网络流量命令 编辑:程序博客网 时间:2024/05/05 05:11
#include<cstdio>int a[15];int main(){    int n;    for(int i=1;i<=14;++i){        for(int j=i+1;;j++){            int num=2*i;            int m=j%num;            if(m==0)                m=num;            int count=0;            while(m>i){                num--;                m=(m+j-1)%num;                if(m==0) m=num;                count++;        }        if(count==i){            a[i]=j;            break;            }        }    }     while(~scanf("%d",&n)&&n)    {        printf("%d\n",a[n]);    }    return 0;}


很巧妙的用了模拟法,推出第一个被杀的人编号为n=j%num,那么接下来被杀的编号即为(n+j-1)%num。
但是不明白的是为什么int num=2*i;这条语句放在第一个for循环就超时,放在第二个for循环中就很快速。

0 0
原创粉丝点击