习题3.10 约瑟夫环 josephus问题
/* 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问题的更多相关文章
- 谁能笑到最后,约瑟夫环-Josephus问题求解
一. 简述Josephus问题 N个人站成一环,从1号开始,用刀将环中后面一个人“消灭“”掉,之后再将刀递给下一个人,这样依次处理,最后留下一个幸存者. 二. 求解方法 1. 约瑟夫问题如果使用 ...
- 单向环形链表解决约瑟夫环(Josephus)问题
一.约瑟夫环问题 Josephu 问题为:设编号为1,2,- n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那 ...
- 约瑟夫环问题(Josephus)
约瑟夫环:用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至最后一个元素并输出该元素的值. 一.循环链表:建立一个有N个元素的循环链表,然后从链表头开始遍历并记数,如果计数值为M,则 ...
- LightOJ - 1179 Josephus Problem(约瑟夫环)
题目链接:https://vjudge.net/contest/28079#problem/G 题目大意:约瑟夫环问题,给你n和k(分别代表总人数和每次要数到k),求最后一个人的位置. 解题思路:因为 ...
- 组合数学--约瑟夫环问题 Josephus
约瑟夫斯问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为约瑟夫环. 有n个囚犯站成一个圆圈,准备处决.首先从一个人开始,越过k-2个人(因为第 ...
- Josephus环的四种解法(约瑟夫环)
约瑟夫环 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个 ...
- hdu 3089 (快速约瑟夫环)
Josephus again Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- javascript中使用循环链表实现约瑟夫环问题
1.问题 传说在公元1 世纪的犹太战争中,犹太历史学家弗拉维奥·约瑟夫斯和他的40 个同胞被罗马士兵包围.犹太士兵决定宁可自杀也不做俘虏,于是商量出了一个自杀方案.他们围成一个圈,从一个人开始,数到第 ...
- tc 147 2 PeopleCircle(再见约瑟夫环)
SRM 147 2 600PeopleCircle Problem Statement There are numMales males and numFemales females arranged ...
随机推荐
- python爬图
闲的无事,看着知乎里种种python优点,按捺不住,装起python3.4. 网上找了点爬行图片的代码,修改至兼容3.4,成功爬行指定url所有jpg图片,代码段如下: import os impor ...
- python操作redis--string
#!/usr/bin/python #!coding:utf-8 """ 完成用redis模块操作string类型的数据 """ impor ...
- Jar
http://docs.oracle.com/javase/6/docs/technotes/guides/jar/jar.html#Intro http://docs.oracle.com/java ...
- Elf 32
[CentOS]安装软件:/ld-linux.so.2: ELF interpreter解决 环境: [orangle@localhost Downloads]$ uname -m&&am ...
- Problem "g++" ("gcc") not found in PATH [ in omnet++ ] ---- 关于OMNeT++软件使用问题
出现的问题就像下面这样: 解释一下我出现这种情况的背景: 1. 首先安装好了OMNeT++软件,关于OMNeT++软件是否安装成功详见另一篇文章 OMNeT++安装教程 2. 也安装好了GCC编译环境 ...
- ROS Node/Topic/Message/Service的一些问题
1.Node http://blog.exbot.net/archives/1412 (摘自老王说ros) node干的什么活?callback queue里的活.这个callback queue里的 ...
- android 自定义圆形进度条
一.通过动画实现 定义res/anim/loading.xml如下: [html] view plain copy print ? <?xml version="1.0" ...
- OAuth2.0 错误码
http://open.taobao.com/doc/detail.htm?id=118 OAuth2.0 错误码 新浪微博OAuth2.0实现中,授权服务器在接收到验证授权请求时,会按照OAuth2 ...
- CSS3中的弹性流体盒模型技术详解
先回顾一下CSS1 和 CSS2中都已经定义了哪些布局方面的属性,这样也会增加我们理解弹性布局. 其实我们现在有很多一部分人,你们刚刚接触CSS层叠样式表,或者接触有一段时间了,但是却没有很好的去 ...
- 单调旋转数组的TopK问题
问题描述:输入一个单调旋转后的数组,求该数组中的第k小的元素. 分析:很多人看到这个题目会有点懵,可能读者不知道什么是旋转数组,我先解释下两个概念, 旋转数组的定义:把一个数组的前几项元素移动到数组的 ...