1145 约瑟夫
约瑟夫问题无非就是这样的,一环人不断的出队
这个题是一个逆向的思维,给定结果问你最初的开始
emmmmmm
其实这个题就是一个类似于搜素的东西
---------重新-----------------
这个题 就是一个很简单的枚举,因为好人坏人都是确定的
也就是前k个好人,再往后的k就是坏人
所以?
所以我们可以枚举这个k因为我们知道上线
然后没杀死一个坏人都要进行一个存储,最后如果杀到了好人就直接结束
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
int k,m;
int first,flag;
int check(int mm)
{
int ans=(first+m-1)%mm;//杀死的人 去摸防止溢出
if(ans>=k)//大于k说明坏人被杀死了满足答案
{
first=ans;
return 1;
}
return 0;//好人被杀,不行,不是我们的答案
}
int main()
{
cin>>k;
m=k;
while(flag==0)
{
flag=1,first=0;//找到答案的标记
for(int i=0;i<k;i++)//枚举
{
if(check(2*k-i)==0)
{
flag=0;
break;
}
}
m++;//答案会多算
}
cout<<m-1<<endl;
return 0;
}