posts - 137,comments - 0,views - 40687
复制代码
#include <iostream>
using namespace std;
typedef struct node {
  int data;
  node* next;
  node() :data(0), next(nullptr) {}
  node(int x) :data(x), next(nullptr) {}
}node;

//循环链表实现约瑟夫问题
void ysflb(int n, int k) {
  if (n <= 0 || k <= 0) {
    cout << "Invalid input: n and k must be positive integers." << endl;
    return;
  }

  // 创建循环链表  
  node* head = new node;
  if (!head) {
    cout << "Memory Failed!\n";
    return;
  }
  head->data = 1; // 第一个人的编号从1开始  
  node* p = head;

  // 赋值  
  for (int i = 2; i <= n; i++) {
    node* r = new node;
    r->data = i;
    r->next = NULL;
    p->next = r;
    p = r;
  }
  p->next = head; // 形成循环链表  

  // 约瑟夫环的模拟  
  node* prev = NULL;
  node* curr = head;
  while (curr->next != curr) { // 当链表中不止一个节点时  
    for (int i = 1; i < k; i++) {
      prev = curr;
      curr = curr->next;
    }
    cout << curr->data << " "; // 输出出局者的编号  
    prev->next = curr->next; // 删除当前节点  
    node* tmp = curr;
    curr = curr->next;
    delete tmp; // 释放当前节点的内存  
  }
  cout << curr->data << endl; // 输出最后一个出局者的编号  
  delete curr; // 释放最后一个节点的内存  
}

int main(void) {
  ysflb(10, 3);
  return 0;
}
复制代码

posted on   wshidaboss  阅读(138)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示