您的位置:首页 > 其它

poj 1012 Joseph环问题

2015-03-02 13:54 405 查看
题意:有k个好人和k个坏人,问想要先处死k个坏人的最小间隔为多少?

思路:k比较小(k<=14),所以对于k进行枚举计算,注意把结果存一下。枚举时的递推式还是需要想一下的。b=(a+m-1)%(n-i+1); (i>=1 , 总人数2n,人编号从0~2n-1,则n-i为第i轮剩余的人数),相当于每轮都把比死者序号大的人的序号减1。

#include <stdio.h>
#include <string.h>
int res[16];
int n;
int main(){
memset(res,0,sizeof(res));
while(scanf("%d",&n) && n){
int i,m,a,b;
if(res
){
printf("%d\n",res
);
continue;
}
a = 0;
for(i = 1,m = 1;i<=n;i++){
b = (a+m-1)%(2*n-i+1);
a = b;
if(b < n){
i = a = 0;
m++;
}
}
res
= m;
printf("%d\n",m);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: