通过循环链表实现约瑟夫环

  • 要求:1)要求设计一个程序模拟次过程,输入总的人数n,所报的出列的数字k,计数开始的位置p;
  • 程序所能达到的功能:构造链表;输入数据;执行报数;储存出列人的序号,删除出列人的信息以及把指向出列人的指针移到出列人的下一个人,然后重新开始执行报数;直到最后一个人报数完毕,程序结束。
  • 测试数据:n=9,9个人的序号分别为:1,2,3,4,5,6,7,8,9。然后p=1,从第一个开始报数。k=5,则确定输出的序列为:5,1,7,4,3,6,9,2,8。

代码

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <limits.h>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <set>
#include <string>
#define ll long long
#define ull unsigned long long
#define ms(a) memset(a,0,sizeof(a))
#define pi acos(-1.0)
#define INF 0x7f7f7f7f
#define lson o<<1
#define rson o<<1|1
const double E=exp(1);
const int maxn=1e6+10;
const int mod=1e9+7;
using namespace std;
typedef struct Node
{int num;struct Node *next;
}Node,*Linklist;
int n,k,m;
Linklist Link_init()
{Linklist head,cycle,body;head=(Node *)malloc(sizeof(Node));head->next=head;
/*-----------------------------------*/head->num=1;cycle=head;
/*----------------------------------*/for(int x=2;x<=n;x++){body=(Node *)malloc(sizeof(Node));body->num=x;body->next=cycle->next;cycle->next=body;cycle=body;}cycle->next=head;return head;
}
void Play(Node *head,int k,int m)
{Linklist first=head;while(first->next!=head)first=first->next;Node *p=head;while(p->num!=k){first=p;p=p->next;}int _=0;while(p->next!=p){for(int i=1;i<m;i++){first=p;p=p->next;}first->next=p->next;cout<<"第"<<++_<<"个出列的人的编号是:"<<p->num<<endl;free(p);p=first->next;}cout<<"第"<<++_<<"个出列的人的编号是:"<<p->num<<endl;free(p);
}
int main(int argc, char const *argv[])
{   freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);ios::sync_with_stdio(false);while(cin>>n){cout<<"请出入参与游戏的总人数:";cin>>n;Node *person=Link_init();cout<<"请输入最开始报数的编号(编号从1~n):";cin>>k;cout<<"请输入出列的序号:";cin>>m;Play(person,k,m); cout<<endl;}return 0;
}

转载于:https://www.cnblogs.com/Friends-A/p/10324321.html

数据结构:循环链表实现约瑟夫环相关推荐

  1. 数据结构趣味题-约瑟夫环

    1.约瑟夫问题 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个 洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定 ...

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

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

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

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

  4. java 实现约瑟夫环

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

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

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

  6. 7-28 猴子选大王 (20 分),从中学习约瑟夫环

    一群猴子要选新猴王.新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号.从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数.如此不 ...

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

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

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

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

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

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

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

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

最新文章

  1. href=#与href=javascriptvoid(0)的区别
  2. truffle详细使用教程
  3. JAVA Cloud微服务项目实战课程 SpringBoot 2.x +SpringCloud 微服务课程
  4. 世界杯开幕硅谷也疯狂:员工边看踢球边工作
  5. 百万数据报表导出:原理分析与总结
  6. python自学到大牛_开始学习Python+一位大牛整理的Python资源
  7. 简单搜索 poj1321
  8. tensorflow api训练3(ckpt转成pb和pbtxt)完结
  9. PCB Layout的10个细节
  10. 回波损耗和电压驻波比
  11. 摄氏温度转化为华氏温度代码
  12. 苹果电脑在哪里改计算机id,苹果电脑改密码怎么改(教你两分钟快速解决)
  13. Spring Data JPA进阶(三):Specification查询
  14. VUE游戏设计:实现外星人的攻击冲击波
  15. 怎样用VR看分频视频?
  16. Linux部署k8s集群
  17. 笔记本/台式机作为扩展屏
  18. 学编程会拉低数学成绩,巴黎大学跟踪1500个小学生得出结论
  19. Golang cron
  20. 小米手机关闭自带服务器,小米手机耗电大?关闭这两个设置,小米手机能更省电!...

热门文章

  1. 学会python爬虫能发财么_python如何赚钱? python爬虫如何进阶? python就业? 如何快速入门python?...
  2. linux检查编译windows,用C,C检测Windows或Linux
  3. mac版本 sadptool_【Koala 工具】设备调试相关工具集锦
  4. Win10下VB6.0开发之VB6.0的安装
  5. “21天好习惯”第一期-8
  6. 计算机硬件中板卡目前设备有哪几种,呼叫中心所需的硬件设备都有哪些?
  7. Hbase数据模型入门
  8. scala 排序接口Ordering
  9. 利用logrotate系统工具切割tomcat日志
  10. 魅族魅蓝note3完美开启usb调试模式的经验