单向循环链表实现约瑟夫问题
来源:互联网 发布:免费html游戏网站源码 编辑:程序博客网 时间:2024/05/16 12:30
// 约瑟夫问题:
/*
问题描述:
输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。
从数列第k个位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,
然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。
请编程实现上述计数过程,同时输出数值出列的顺序
比如: 输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置)
第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4,从数值4所在位置从新开始计数
第二轮计数出列数字为3,计数值更新m=3,出列后数列为1,4,从数值1所在位置开始计数
第三轮计数出列数字为1,计数值更新m=1,出列后数列为4,从数值4所在位置开始计数
最后一轮计数出列数字为4,计数过程完成。
输出数值出列顺序为:2,3,1,4。
入口参数:
n:输入的字符的个数
k: 初始计数位置
m: 初始计数值m
*/
void josephus(int n,int k,int m){
LinkList head;
InitList_loop(head);
for(int i=1;i<=n;i++)
{
ListInsert_loop(head,i,i);
}
Travese_loop(head,print);
LinkList P,q;
P = head;
while(P->next!=P)
{
for(int j=1;j<m+k;j++)
{
q = P;
P = P->next;
if(P == head)
m++;
}
m = P->data ;
print(m);
q->next = P->next; // delete P node;
P = P->next;
k = 0;
}
}
- 单向循环链表实现约瑟夫问题
- 约瑟夫问题的单向循环链表的代码实现
- 单向循环链表—约瑟夫问题
- 约瑟夫问题的单向循环链表的解法
- 约瑟夫问题(单向循环链表应用实例)
- JavaScript数据结构之单向循环链表应用-约瑟夫问题
- c语言数据结构之单向循环链表约瑟夫问题
- java单向循环链表实现约瑟夫环
- 用单向循环链表实现约瑟夫环
- 单向循环链表--约瑟夫环
- 约瑟夫环---单向循环链表
- 单向循环链表求解约瑟夫环
- 单向循环链表实现约瑟环问题
- 用循环链表实现约瑟夫问题
- 约瑟夫问题简单实现-循环链表
- C++循环链表实现约瑟夫问题
- 约瑟夫问题--循环链表实现
- 循环链表 约瑟夫环问题实现
- Unity3D脚本中文系列教程(九)
- java编程规范
- 筛素数和欧拉函数的模板
- Unity3D脚本中文系列教程(十)
- SWC和SWF文件比较
- 单向循环链表实现约瑟夫问题
- 断想
- 设置环境变量和使配置立即生效
- Unity3D脚本中文系列教程(十一)
- delete this
- 服务器级别的线程类
- Unity3D脚本中文系列教程(十二)
- Android eMMC Booting
- net.tcp WCF引用出错 “超出最大名称表字符计数配额(16384)”