/* HELLO.C -- Hello, world */
#include "stdlib.h"
#include "stdio.h"
#include "windows.h"
//#define N 19
//#define M 5
int main()
{ int k=0;
int N,M;
typedef struct node
{
int data;
struct node *next;
}linklist;
linklist *r,*p,*rp;int i;
p=(linklist*)malloc(sizeof(linklist));
p->data=1;
rp=p;
puts("希望你听说过Josepus问题,这是个著名的人提出来的。/n具体过程是:一共有N个小孩围成圈,从第一个小孩开始报数,报到M的小孩就要被杀死。/n虽然很残忍,但是你必须求出最后剩下的那个。/n");
printf("请输入小孩的总数N:");
scanf_s("%d",&N);
printf("请输入倒霉的数字M:");
scanf("%d",&M);
for(i=0;i<=N-2;i++)
{
rp->next=(linklist*)malloc(sizeof(linklist));
rp->next->data=i+2;
rp=rp->next;
}
rp->next=p;
while(p->next!=p)
{
k++;
Sleep(30);
if(k==M)
{
printf("%-3d号被杀死X-X./n",p->next->data);
r=p->next->next;
free(p->next);
p->next=r;
k=0;
}
p=p->next;
}
printf("最后剩下的事%-3d号小朋友哦!",p->data);
}