luogu P1145 约瑟夫
题目描述
n个人站成一圈,从某个人开始数数,每次数到m的人就被杀掉,然后下一个人重新开始数,直到最后只剩一个人。现在有一圈人,k个好人站在一起,k个坏人站在一起。从第一个好人开始数数。你要确定一个最小的m,使得在第一个好人被杀死前,k个坏人先被杀死。
感谢yh大神指出样例数据的错误。
输入输出格式
输入格式:
一个k,0<k<14
输出格式:
一个m
输入输出样例
输入样例#1:
3
输出样例#1:
5
输入样例#2:
4
输出样例#2:
30
说明
0<k<14
枚举答案——检验
#include<cstdio> int k,Ct; bool Check( int m ) { Ct=0; for(int T=k*2;T!=k;T--) { (Ct+=m%T)%=T; if(Ct<k)return false; } return true; } int main() { scanf("%d",&k); int ans; for(ans=1;;ans++ ) if( Check(ans))break; printf("%d\n",ans+1); return 0; }