约瑟夫环(递推)

来源:互联网 发布:32单片机蜂鸣器程序 编辑:程序博客网 时间:2024/05/22 14:10

约瑟夫环:

   f[i]=(f[i-1]+m)%i 



//变种约瑟夫环  1005 小白兔智斗狐狸 

f[0]=n;第一次数到的地方。

思路:  f[i]=(f[i-1]+i)%n;

#define M 2002 int f[M],n;bool vis[M];void solve(){    f[0]=n;    for(int i=1;i<=n;i++)    {           f[i]=(f[i-1]+i-1)%n+1;           vis[f[i]]=1;    }    bool f=1;    for(int i=1;i<n;i++)     if(!vis[i])      {        if(f)printf("%d",i);        else printf(" %d",i);        f=0;      }    if(f)printf("no safe caves\n");    else printf("\n");}int main(){    int T;    cin>>T;    while(T--)    {        CLS(vis,0);        cin>>n;        solve();    }//每次失败的地方开始,向后数m个又是失败    return 0;}


0 0
原创粉丝点击