解决约瑟夫环问题核心步骤:

1.建立具有n个节点、无头的循环链表

2.确定第一个报数人的位置

3.不断从链表中删除链节点,直到链表为空

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std; typedef struct lnode
{
int data;
struct lnode *link;
}lnode; /**
* @brief 约瑟夫环问题:
* n 个人,编号为 1,2,...,n
* 从编号K的人开报数(从1开始)
* 喊道 m 的人出列,也就是:从 1 数到 m,
*
* @param total 总人数
* @param start 确定第一个开始报数的人编号
* @param outnum 指定出列者喊到的数
*/
void JOSEPHUS(int total, int start, int outnum)
{
//1. 定义变量
lnode *p;
lnode *r;
lnode *curr; //curr 指向尾, curr->link 指向头 //2. 建立第一个节点
p = (lnode*)malloc(sizeof(lnode));
p->data = ;
p->link = p;
curr = p; //3. 建立循环链表
for (int i=; i<=total; i++)
{
lnode *t = (lnode*)malloc(sizeof(lnode));
t->data = i;
t->link = curr->link;
curr->link = t;
curr = t;
printf("%d\n", i);
} //4. 指针移动到第一个报数的人
while (start--)
{
r = p;
p = p->link;
} //5. 开始遍历删除
while (total--)
{
//定位删除点
for (int s=outnum-; s--; r=p,p=p->link); printf("%d->", p->data); //删除节点
r->link = p->link;
free(p);
p = r->link;
}
printf("\n");
} int main()
{
int total = ; //总人数
int start = ; //确定第一个开始报数的人编号(1,2,...)
int outnum = ; //指定出列者喊到的数 JOSEPHUS(total, start, outnum);
}

最新文章

  1. sudo命令使用的几个场景
  2. 【Alpha】团队贡献分配计划
  3. gitignore for vs
  4. 手机金属外壳加工工艺:铸造、锻造、冲压、CNC
  5. Scala语言专题
  6. android studio环境搭建-笔记1
  7. break与continue
  8. 安装Eclipse Html Editor
  9. BZOJ 1901: Zju2112 Dynamic Rankings( BIT 套 BST )
  10. android 实现代码关机
  11. Android模拟器
  12. 浏览器的同源策略及CORS跨域解决方案 DRF
  13. 未能加载文件或程序集“System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项
  14. HTTP协议概念与特点,HTTP的状态码,HTTPS是什么?
  15. enctype=&quot;multipart/form-data&quot;表单传值问题
  16. PHP类多继承的替代方案Traits
  17. 不光是查找值! &quot;二分搜索&quot;
  18. Revit Family API 添加参数与尺寸标注
  19. [运维-安全]CentOS7.0环境下安装kangle和easypanel
  20. egret 精简游戏项目

热门文章

  1. Mysql slave 延迟故障一列(无主键)
  2. 安装本地jar包
  3. The Heaviest Non-decreasing Subsequence Problem
  4. (三)Activiti之第一个程序以及Activiti插件的使用和Activiti表的解释
  5. JSQI网站大事表 | Website Landmark
  6. ELK日志分析系统的搭建
  7. 【大数据】Clickhouse基础知识
  8. mysql控制台常用命令
  9. Python使用selenium模拟点击(二)
  10. (12)流程控制if