/*
最普通的约瑟夫环的写法,用一个数组来模拟一个环,什么算法都没用,以前又看到过链表版本的,
队列版本的。。。。但是,最神犇你的还要属于位运算版本的。。虽然那个现在还没有学会,以后
会认真的学习的。
关键的几个要点:do-while的循环终止条件,出队人数的统计,报数器,一个随时跟着所有人编号的变量
bool 类型的数组。
*/
# include<cstdio>
# include<iostream>
using namespace std;
# define MAX 100+10
bool a[MAX];//开一个布尔逻辑类型的数组,用来表示队伍中每个人的状态。false表示在队列中,true表示已经出队
int main(void)
{
int n,m;cin>>n>>m;
for ( int i = 1;i <= n;i++ )
a[i] = false;//一开始将所有人都在这个队列中啊
int t,f,s;
t = f = s = 0;//do-while前的初始化
do
{
t++;//从第一个人开始依次报数了~
if ( t == n+1 )
t = 1;//用数组来模拟一个环,经常使用的一个技巧
if ( a[t]==false )
s++;//如果这个位置还有人在的话,就报数加一
if ( s==m )
{//报啊报,终于报到我们要找的那个人了~
s = 0;//报数器从此清0
cout<<t<<endl;//输出这个人的编号
a[t] = true;//这个人就从此滚出了队列
f++;//出队人数加一
}
}while( f!=n );//牛逼的结束条件
return 0;
}