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

基本要求

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

测试数据

n=7, 7 个人的密码依次为:3,1,7,2,4,8,4,首先 m 值为 6(正 确的出列顺序应为 6,1,4,7,2,3,5),输出的密码为 8,3,2,4,1, 7,4.

实现提示

程序运行后,首先要求用户指定初始报数上限值,然后读取各人的密 码。可设 n<=30。此题所用的循环链表中不需要“头节点”,请注意空表和非空表的界限。

算法代码:

#include

#include

#define LEN sizeof(struct Student)

#define N 7

struct Student //用链表建立学生数据类型

{

int number;

int password;

struct Student *next;

};

struct Student *creat(void) //输入具体学生信息,约定0,0结束

{

struct Student *head;

struct Student *p1,*p2;

int n=0;

p1=p2=(struct Student *)malloc(LEN);

scanf("%d,%d",&p1->number,&p1->password);

head=NULL;

while(p1->number!=0)

{

n=n+1;

if(n==1)head=p1;

else p2->next=p1;

p2=p1;

p1=(struct Student *)malloc(LEN);

scanf("%d,%d",&p1->number,&p1->password);

}

p2->next=head;

return(head);

}

void Joseph(struct Student *head,int count) //游戏环节,按照约瑟夫环规则运行,并输出结果

{

int m;

struct Student *p;

p=head;

for(m=1;m

p=p->next;

printf("%d,%d\n",(p->next)->number,(p->next)->password);

count=p->next->password;

p->next=p->next->next;

do{

for(m=1;m

p=p->next;

printf("%d,%d\n",(p->next)->number,(p->next)->password);

count=p->next->password;

p->next=p->next->next;

}while(p!=p->next);

printf("%d,%d\n",p->number,p->password);

}

void main() //主函数,输入学生信息和上限值

{

struct Student *Head;

int num;

printf("请输入个人的序号和密码:\n");

Head=creat();

printf("请指定初始报数上限值:\n");

scanf("%d",&num);

Joseph(Head,num);

}

运行结果:

约瑟夫环c语言代码顺序存储,约瑟夫环问题算法的C语言代码实现相关推荐

  1. 代码验证约瑟夫环百科词条中的故事(Python)——约瑟夫斯的故事、数学家加帕斯讲的故事,体验算法模板的奇妙。

    [点击此处跳转笔记正文] Python 官网:https://www.python.org/ Free:大咖免费"圣经"教程< python 完全自学教程>,不仅仅是基 ...

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

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

  3. 约瑟夫环c语言代码 指针,约瑟夫环C语言实现源代码(1)

    前天笔试有个约瑟夫环的问题,怪不得人家没通知我面试,原来我的约瑟夫环做的确实有问题,昨天晚上又重新做了下,下面上源代码: /* file:osephu.cpp author:www.5dkx.com ...

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

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

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

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

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

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

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

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

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

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

  9. java 实现约瑟夫环

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

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

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

最新文章

  1. [分享]发布自己C#开发的ReSharper2.0 for VS2003/2005 注册机
  2. 浅析JAVA_HOME,CLASSPATH和PATH的作用
  3. 关于垂直切分Vertical Sharding的粒度
  4. Linux内存管理之内存寻址:分段机制的实现方式
  5. Stanford CS224N: PyTorch Tutorial (Winter ‘21) —— 斯坦福CS224N PyTorch教程 (第三部分)
  6. 恶意样本分析流程记录
  7. 个人财务管理系统beancount-gs
  8. 最痛苦的时候不能对最亲近的人诉说——痛苦莫过如此——最痛的苦
  9. TeamViewer和向日葵远控软件的个人使用感觉
  10. CSS3-@keyframes动画
  11. 2019年最新《Web 前端开发》等级考试模拟题~以国家 “1+X” 职业技能证书为标准,厚溥推出 Web 前端开发人才培养方案...
  12. Vue:页面加载进度条
  13. python cv2什么意思_这次一定要记住opencv和cv2是什么及其基础用法
  14. html自适应meta标签,seo常用meta标签:自适应网站设计对百度友好的关键
  15. matlab中dmodce函数使用报错,matlab中randi函数
  16. 用 Python 写个计算器
  17. 软件开发流程(一):总结软件开发流程的经验教训
  18. k8s 安装 EFK
  19. 内网渗透思路整理与工具使用
  20. 计算机组成原理 基础资料

热门文章

  1. 中国大学 MOOC C语言程序设计----编程部分答案解析
  2. 神经网络matlab仿真,MATLAB神经网络仿真与应用_IT教程网
  3. 科沃斯扫地机器人橡胶配件_扫地机器人主要配件,扫地机器人配件详解
  4. access做mysql前端,ASP+ACCESS留言板制作详细教程
  5. Linux命令之chmod命令
  6. FreeTextBox使用详解(FTBv3-1-6)
  7. 广东2022年下半年系统集成项目管理工程师上午真题及答案解析
  8. 系统集成项目管理工程师考试英语吗?
  9. [常用]MySQL管理工具和应用程序
  10. 几种常见的模式识别算法整理和总结