现在的位置: 首页 > 综合 > 正文

JOsepus问题的解决方法

2014年03月22日 ⁄ 综合 ⁄ 共 820字 ⁄ 字号 评论关闭

/*  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);

}

抱歉!评论已关闭.