JOsepus问题的解决方法

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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值