Description
一天粒粒想到我们实验室玩个小游戏!n个人围成一圈!一起报数!报到第m的时候!那个报m的退出!又从1开始报!依次类推!只到剩下一个人为止!ACMer丹丹想知道那些位置的人依次退出!ACMer抛抛想知道最后是一个人是那个位置!做为聪明的ACMer请设计一个程序告诉她们吧!(位置编号从1开始顺时针到n)
Input
输入二个数 n 和 m。
Output
输出依次退出的位置编号!每个一行!以及最后一个留下的人的位置编号!
Sample Input
1 25 3
Sample Output
131524
// File Name: 链表训练之约瑟夫环.cpp
// Author: rudolf
// Created Time: 2013年03月11日 星期一 19时17分09秒
#include<vector>
#include<list>
#include<map>
#include<set>
#include<deque>
#include<stack>
#include<bitset>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
typedef int datatype;
using namespace std;
typedef struct slonode
{
int data;
struct slonode *next;
}slonode,*linklist;
//
linklist build(linklist p,datatype num,datatype n)
{
// slonode *head,*p i//=head;
p=(linklist)malloc(sizeof(slonode));
p->data=num;
p->next=NULL;
if(num!=n)
p->next=build(p->next,num+1,n);
return p;
}
int main()
{
int n,m;
linklist p,head,q;
while(cin>>n>>m)
{
head=build(head,1,n);
// int k=0;
// p=head;
int now=0;
while(n>0)
{
q=head;
int k=(now+n+m-1)%n;
now=k;
q=head;
if(k==0)
{
p=head;
head=head->next;
}
else
{
while(k--&&k>0)
q=q->next;
p=q->next;
q->next=p->next;
}
n--;
printf("%d\n",p->data);
free(p);
}
}
return 0;
}