首页 > 代码库 > luogu P1145 约瑟夫
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;}
luogu P1145 约瑟夫
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。