poj1012 约瑟夫

来源:互联网 发布:杭州市城市规划院 知乎 编辑:程序博客网 时间:2024/05/19 14:01

题目:http://poj.org/problem?id=1012

描述:有2n个人围成一个圈,前n个人是好人,后n个人是坏人,玩一个游戏,给定一个m,当数到m的人出队,由剩下的人开始重新数,不断循环。问一个最小的m,使得后k个坏人全部出队时,还没有一个好人出队。(约瑟夫的变形)

 

约瑟夫:http://baike.baidu.com/view/213217.htm

 

由于n比较小,所以先打表。

 

#include<stdio.h>#include<string.h>int check[20];int num[15];void aa(){int i,j,n,m,s;for(n=1;n<14;n++){m=2*n;for(i=n+1;;i++){s=0;memset(check,0,sizeof(check));for(j=1;j<=n;j++){s=(s+i-1)%(m+1-j);if(s<n)break;}if(j==n+1){num[n]=i;;break;}}}}int main(){int i,j,n,m,s;aa();while(scanf("%d",&n)>0,n){printf("%d\n",num[n]);}return 0;}


 

原创粉丝点击