【算法】约瑟夫问题--C++源代码(g++ 7.2.0)

     1  #include <iostream>
     2  using namespace std;
     3
     4  struct Node
     5  {
     6          int data;
     7          Node* next;
     8  };
     9
    10  void Josephus(int total, int m , int n)
    11  {
    12          Node* p = NULL;
    13          Node* cur = NULL;
    14          Node* temp = NULL;
    15
    16          p = (Node*)malloc(sizeof(Node));
    17          p->data = 1;
    18          p->next = p;
    19          cur = p;
    20
    21          for(int i=2; i<=total; i++)
    22          {
    23                  Node* local = (Node*)malloc(sizeof(Node));
    24                  local->data = i;
    25                  local->next = cur->next;
    26                  cur->next = local;
    27                  cur = local;
    28          }
    29
    30          while(--m)
    31          {
    32                  temp = p;
    33                  p = p->next;
    34          }
    35
    36          while(total--)
    37          {
    38                  for(int i=n; --i; temp = p, p = p->next);
    39                  temp->next = p->next;
    40                  cout<<(p->data)<<" is out"<<endl;
    41                  free(p);
    42                  p = temp->next;
    43          }
    44  }
    45
    46
    47  int main()
    48  {
    49          Josephus(10,1,3);
    50          return 0;
    51  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值