/* assume a header */
/* 双向循环链表 */
struct Node;
typedef struct Node * PtrToNode;
typedef PtrToNode List;
typedef PtrToNode position; struct Node{
PtrToNode Previous;
PtrToNode Next;
int Ele;
};
/* 删除双向循环链表中的元素例程 */
Position
Delete( Position p )
{
Position tmp;
tmp = p->next;
p->Previous->Next = tmp;
tmp->Previous = p->Previous;
free( p );
return tmp;
}
void
josephus( List L, int m, int n )
{
int i,count = ;
Position p;
p = L->Next;
while( n > )
{
count = m % n;
for(i = ; i < count; i++)
p = p->Next;
p = Delete( p );
n--;
}
printf("%d",p->Ele);
}

L默认为双向循环链表,L为表头,Delete为删除双向链表结点的函数

整个表结构类似一个圆圈上面加一个表头

拓展:创建一个双向循环链表,以输入为0结束

struct Node{
PtrToNode Previous;
PtrToNode Next;
int Ele;
};
//创建一个双向循环链表
Position
CreateDoubleList( void )
{
PtrToNode head,last,now;
head = last = malloc( sizeof(struct Node ) );
now = malloc( sizeof(strut Node ) );
scanf("%d",&now->Ele);
while(now->Ele != )
{
last->Next = now;
now->Previous = last;
last = now;
now = malloc( sizeof( struct Node ) );
scanf("%d",&now->Ele);
}
last->Next = head;
head->Previous = last;
free(now);
return head;
}

创建一个单链表,类似

//创建一个单向链表

struct Node{
int data;
PtrToNode Next;
};
Position
CreateSingleList( void )
{
Position head,last,now;
head = last = malloc( sizeof( struct Node ) );
now = malloc( sizeof( struct Node ) );
scanf("%d",&now->data);
while(now->data != )
{
last->Next = now;
last = now;
now = malloc( sizeof( struct Node ) );
scanf("%d",&now->data);
}
last->Next = NULL;
free(now);
return head;
}

习题3.10 约瑟夫环 josephus问题的更多相关文章

  1. 谁能笑到最后,约瑟夫环-Josephus问题求解

     一. 简述Josephus问题 N个人站成一环,从1号开始,用刀将环中后面一个人“消灭“”掉,之后再将刀递给下一个人,这样依次处理,最后留下一个幸存者. 二. 求解方法  1.  约瑟夫问题如果使用 ...

  2. 单向环形链表解决约瑟夫环(Josephus)问题

    一.约瑟夫环问题 Josephu 问题为:设编号为1,2,- n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那 ...

  3. 约瑟夫环问题(Josephus)

    约瑟夫环:用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至最后一个元素并输出该元素的值. 一.循环链表:建立一个有N个元素的循环链表,然后从链表头开始遍历并记数,如果计数值为M,则 ...

  4. LightOJ - 1179 Josephus Problem(约瑟夫环)

    题目链接:https://vjudge.net/contest/28079#problem/G 题目大意:约瑟夫环问题,给你n和k(分别代表总人数和每次要数到k),求最后一个人的位置. 解题思路:因为 ...

  5. 组合数学--约瑟夫环问题 Josephus

    约瑟夫斯问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为约瑟夫环. 有n个囚犯站成一个圆圈,准备处决.首先从一个人开始,越过k-2个人(因为第 ...

  6. Josephus环的四种解法(约瑟夫环)

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

  7. hdu 3089 (快速约瑟夫环)

    Josephus again Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  8. javascript中使用循环链表实现约瑟夫环问题

    1.问题 传说在公元1 世纪的犹太战争中,犹太历史学家弗拉维奥·约瑟夫斯和他的40 个同胞被罗马士兵包围.犹太士兵决定宁可自杀也不做俘虏,于是商量出了一个自杀方案.他们围成一个圈,从一个人开始,数到第 ...

  9. tc 147 2 PeopleCircle(再见约瑟夫环)

    SRM 147 2 600PeopleCircle Problem Statement There are numMales males and numFemales females arranged ...

随机推荐

  1. Delphi通过GetFileVersionInfo和VerQueryValue等API函数取得详细EXE信息

    This has been described at About: http://delphi.about.com/cs/adptips2001/a/bltip0701_4.htmBasically, ...

  2. Matlab与.NET混编解决人脸识别问题

    原文 http://www.cnblogs.com/asxinyu/archive/2013/05/29/3107013.html 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的 ...

  3. EasyUI选项卡tab页面处理示例

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. 关于清晰讲解linux正则表达式的博文分享

    http://www.cnblogs.com/chengmo/archive/2010/10/10/1847287.html  linux shell 正则表达式(BREs,EREs,PREs)差异比 ...

  5. 【HDU】4092 Nice boat(多校第四场1006) ——线段树 懒惰标记

    Nice boat Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) To ...

  6. NSTimer你真的会用了吗

    http://www.cnblogs.com/smileEvday/archive/2012/12/21/NSTimer.html

  7. [C++ 2011 STL (VS2012 Update4) 源代码阅读系列(2)]熟悉一些宏定义和模版偏特化或叫模版专门化

    [C++ 2011 STL (VS2012 Update4) 源代码阅读系列(2)]熟悉一些宏定义和模版偏特化或叫模版专门化 // point_test.cpp : 知识点练习和测试,用于单步调试,跟 ...

  8. Appium for Windows环境搭建

    服务环境: 1.安装Nodejs 下载nodejs安装包(http://nodejs.org/download/)安装 测试安装是否成功:运行cmd,输入node -v 2.安装android的SKD ...

  9. 图片延迟加载并等比缩放,一个简单的JQuery插件

    使用方法: $(".viewArea img").zoom({height:74,width:103}); (function($){ $.fn.zoom = function(s ...

  10. 【(阶乘的质因数分解)算组合数】【TOJ4111】【Binomial efficient】

    n<=10^6 m<=10^6 p=2^32 用unsigned int 可以避免取模 我写的SB超时 阶乘分解代码 #include <cstdio> #include &l ...