C语言实现约瑟夫环.pdfVIP

  • 1
  • 0
  • 约3.54千字
  • 约 3页
  • 2021-11-17 发布于天津
  • 举报
《约瑟夫环》实验报告 专业:网络工程 班级 学号 姓名 一、问题描述: 约瑟夫问题的一种描述是: 编号为 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 ) 二、程序设计的基本思想,原理和算法描述: 采用结构体定义单链表,格式为: struct Lnode {int number; int password; struct Lnode *next; }Lnode,*p,*q,*head; 其中 number 是人的排列序号, password 是各人所持有的密码值, next 是节点指针。 Lnode 是节点变量, p、q 是节点, head 是头指针。 程序的代码:定义变量 n ,i,m,j 输入人的数量 n If n=0 或 n30 重新输入 n 值 当 0in 时 建立单链表并且输入各人的密码值 p-password 尾指针指向头指针,形成循环链表 输入初始报数上限值 m 当 1=j=n 时 循环找出报 m 的节点 p 输出报 m 节点的编号 p-number 将 p-password 赋给 m 值 删除此节点 结束 三、源程序及注释: #includestdio.h #includestdlib.h struct Lnode /* 定义链表 */ {int number; int password; struct Lnode *next; }Lnode,*p,*q,*head; int main(void) {int n; /*n 个人 */ int i; int m; /* 初始报数上限值 */ int j; printf(please enter the number of people n:); /* 输入测试人的数量 */ scanf(%d,n); loop:if(n=0||n30) /* 检验 n 是否满足要求,如不满足重新输入 n 值 */ {printf(\n n is erorr!\n\n); printf(please enter t

文档评论(0)

1亿VIP精品文档

相关文档