题目(魔法师JACK):
【题目描述】
羊羊们真倒霉,城堡的主人竟然是Jack。他是一个非常邪恶的魔法师。Jack看到有入侵者,十分生气,打算把羊群们一网打尽。当然,为了戏弄喜羊羊们,Jack 出了个主意,让羊群中选出一只羊来与他决斗,于是,羊羊们开始挑选代表(可怜的代表)。他们共n 只羊围成一圈,规定从1 号羊开始,依次向后报数,报到k 的羊出圈。再从这只羊开始,往后从1 依次报数,报到k+1 的羊出圈。这只羊出圈后,在从下一只羊开始从1 报数,报到k+2 的羊出列……最后剩下的一只羊,就是羊群的代表。
【输入】
第1 行,一个正整数n(n≤100),代表n 只羊。
第2 行,一个正整数k(k≤20),代表第一次报到k 的羊出列
【输出】
一行,一个数,表示最后一只羊的编号。
【样例输入】
8
5
【样例输出】
7
分析:
约瑟夫问题,模拟即可(辣鸡楼主挂成70分)
代码:
#include<bits/stdc++.h>
using namespace std;
int n,k,xz=1,ans,tqx=1,m;
bool d[110];
int main(){
cin>>n>>k;
memset(d,true,sizeof(d));
m=n;
while(m>1){
if(d[xz]){
xz++;
tqx++;
}
else xz++;
if(xz>n) xz-=n;
if(d[xz]&&tqx==k){
d[xz]=0;
m--;
k++;
xz++;
tqx=1;
}
}
for(int i=1;i<=n;i++)
if(d[i]==1) ans=i;
cout<<ans;
return 0;
}