题目:约瑟夫环

【问题描述】
约瑟夫(Joseph)问题的一种描述是:编号为1,2,.....,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1开始报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有的人都出列为止。试设计一个程序求出列顺序。

【其本要求】
利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。

【测试数据】
M的初值为20;n=7,7个人密码依次为:3,1,7,2,4,8,4,首先m的值为6(正确的出列顺序应为6,1,4,7,2,3,5)。

#include "iostream"
using namespace std;
typedef struct LNode
{
int num;   //表示该元素的编号
int password;   //表示该元素的密码
struct LNode *next;
}LNode,*LinkList;   // 结点类型,指针类型
int Insert(LinkList &L,int password, int num)  //引用类型的参数
{
LinkList p;
if(L==NULL)   //第一个结点
{
p=(LinkList)malloc(sizeof(LNode));
if(!p)
{
cout<<"分配空间失败!"<<endl;
return -1;
}
p->num=num;
p->password=password;
L=p;
}
else
{
p=(LinkList)malloc(sizeof(LNode));
if(!p)
{
cout<<"分配空间失败!"<<endl;
return -1;
}
p->num=num;
p->password=password;
L->next=p;
p->next=NULL;
L=p;
}
return 0;
}
void Joseph(LinkList &L,int k,int m)  //引用类型的参数
{
int i;
LinkList p,q;
p=q=L;
while(q->next!=L)
q=q->next;
while(k>0)
{
for(i=1;i<m;i++)
{
q=q->next;
p=p->next;
}
q->next=p->next;
cout<<p->num<<"  ";
m=p->password;  //更新m的值
free(p);
k--;    //人数减1
p=q->next;
}
cout<<endl;
}
int main(void)
{
int m,n,i,t;
LinkList head,p=NULL;
cout<<"请输入人数:";         //输入人数n
cin>>n;
cout<<"请输入初始密码:";     //输入初始密码m
cin>>m;
cout<<"请输入大家手中的密码:"<<endl;
for(i=1;i<=n;i++)
{
cin>>t;
if(Insert(p,t,i)==-1)
return 0;
if(i==1)
head=p;
}
p->next=head;  //构成约瑟夫环
cout<<"出列的顺序如下:"<<endl;
Joseph(head,n,m);
system("pause");
return 0;
}

运行结果如下图:

结构体定义中

typedef struct LNode
{
int num;
int password;
struct LNode *next;
}LNode,*LinkList;   // 结点类型,指针类型

typedef 声明,简称 typedef,为现有类型创建一个新的名字。
typedef struct Node  
{  
int data;  
struct Node* next;  
}LNode, *LinkList;  
LNode就相当于struct Node ,起了一个别名。
*LinkList也相当于struct Node

也就是:

LNode 等价 struct Node
LinkList 等价 LNode* 等价 struct Node*

LNode a;等价 struct Node a;
LinkList p;等价 LNode* p;等价 struct Node* p;

课程设计---约瑟夫环相关推荐

  1. 算法科普:什么是约瑟夫环

    1 问题描述 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知 n 个人(以编号1,2,3-n分别表示)围坐在一张圆桌周围.从编号为 k 的人开始报数,数到 m 的那个人出圈:他的下一个人又从 1 开 ...

  2. java 实现约瑟夫环

    这一次是借鉴模仿别人写的代码,以前觉得不好将数据结构的链结构什么的迁移到java上来使用,但这一次确实让我感受到了可以自己构造数据结构,然后使用类似链的方式来解决约瑟夫环,有所顿悟.不多说,继续上代码 ...

  3. 程序员面试系列——约瑟夫环

    约瑟夫斯问题(Josephus Problem) 约瑟夫斯问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为"约瑟夫环",也 ...

  4. 约瑟夫环数据结构c语言程序,数据结构的C语言(类C语言)--单向循环链表--约瑟夫环...

    代码区 约瑟夫环:用类C语言实现!!!可以成功运行!!!不是仅仅的算法,而是实实在在的类C #include #include typedef int ElemType; typedef struct ...

  5. # R语言——约瑟夫环

    约瑟夫环: n个人围成一个圈,从第一个人点名,每数到第三个人,这个人移出圈外, 依次类推,求最后留下来的人编号是? 思路:每次循环重新编码序号作为names,并根据names 进行筛选 拓展:约瑟夫环 ...

  6. 循环列表实现约瑟夫环

    1.作业需求 利用循环列表实现约瑟夫环 looplink.h来实现函数声明 #ifndef __LOOPLINK_H__ #define __LOOPLINK_H__ typedef int data ...

  7. 浙江高考VB之约瑟夫环

    浙江信息技术Giao考之 "约瑟夫环" 在浙江信息技术高考中,有一种题型叫做 约瑟夫环题; 首先,约瑟夫环是什么东西? 鲜活的栗子: 我们现在有6个小朋友,分别标号为1 ~ 6.从 ...

  8. n个人围成一个圈报3,或者约瑟夫环,或者丢手绢

    标题:n个人围成一个圈报3,或者约瑟夫环,或者丢手绢 下面这个视频,可以让你了解什么是约瑟夫环,此后,自己写代码实现一下,可以看看我的代码作为参考, 参考视频: 调用,n=10,编号从1-10,sta ...

  9. 约瑟夫环Java实现

    面试中可能经常会遇到约瑟夫环问题,逻辑上很简单,就是看怎么实现了,一般而言,最简单最直观的就是利用链表,然后构建一个循环结构,正好是环,最后计算出结果. 遍历环形链表会是一个无限循环,如果链表中的数据 ...

最新文章

  1. 【HDU】1305 Immediate Decodability(字典树:结构体数组,二维数组,链表/指针)
  2. 部署软件RDMA的步骤
  3. 【MySQL】数据库死锁查询及处理
  4. taxtable java_C语言计算个人所得税问题代码及解析
  5. it行业里 有哪些职位 职业寿命 比较长_计算机行业范围广泛,这5个高薪IT专业,月薪过万,女生也适合...
  6. Java-获取本地都有哪些字体
  7. 剑指offer之对称的二叉树
  8. 初探HTML5.x新特性《dialog》标签
  9. 最新易商支付源码/代付系统PHP源码+功能超级强大
  10. python随手记自动记账_简化记账——我的“随手记”
  11. ZBrush雕刻人物:人体比例及肌肉骨骼介绍
  12. tpm_crb MSFT0101:00: [Firmware Bug]: ACPI region does not cover the entire command/re处理
  13. vue单页面应用项目优化总结
  14. win10去除快捷小箭头_【批处理】win 去除桌面图标小箭头
  15. CGCS2000/WGS84/ITRF关系
  16. CentOS7.4配置OpenLDAP Client集成AD服务及SSSD服务与SSH服务
  17. Android个人信息页面
  18. springcloud五大神兽之Eureka介绍
  19. Excel如何将合并单元格后面的数据合并
  20. nreal AR开发 流程梳理

热门文章

  1. php的cgi的设置,apache中配置php支持模块模式、cgi模式和fastcgi模式
  2. 一文读懂阿里云数据库Autoscaling是如何工作的
  3. 饿了么EMonitor演进史
  4. unity3d干货分享:实现敌人锥形视角的3个方法
  5. IOS 9人机界面指南(1):UI设计基础
  6. 魔方游戏实现:任意阶魔方的表示
  7. 如何解决游戏延迟,增强用户体验? 几种可行方案分享
  8. 蓝桥练习题题解——作物杂交——Java
  9. JDBC连接Oracle RAC
  10. 如何使用 TRACERT 解决 Windows 中的 TCP/IP 问题