【模拟】【2018.9.20普及组模拟】T1(WOJ 3973) 魔法师JACK

题目(魔法师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;
}

猜你喜欢

转载自blog.csdn.net/qq_42754826/article/details/82812867