习题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 ...
随机推荐
- Unix/Linux环境C编程入门教程(21) 各个系统HelloWorld跑起来效果如何?
Unix/Linux家族人员众多,我们无法一一讲解如何配置环境. 本文选定我们在前面安装的RHEL6 RHEL7 MAC10.9.3 Solaris11如何跑起来helloworld RHEL 6 上 ...
- Activity和View的区别:
Activity和View的区别: activity相当于控制部分,view相当于显示部分.两者之间是多对多的关系,所有东西必须用view来显示. viewGroup继承自view,实现了ViewM ...
- OpenFileDialog 害人的RestoreDirectory
莫名其妙出现找不到文件的错误.经查,发现: OpenFileDialog,SaveFileDialog在选择文件后,会切换当前程序目录的路径(System.Environment.CurrentDir ...
- 解决ZBarSDK 中文出现乱码
使用ZBarSDK进行二维码解释时出现乱码是因为ZBarSDK在解释时使用的字符集不对,需在ZBarSDK的源码中更正. 1.可以到http://sourceforge.net/p/zbar/_lis ...
- 关于httpHandlers、handlers和httpModules、modules的那些配置中的各种问题
在web.config中配置httpHandlers.handlers和httpModules.modules根据服务器环境不同设置各有不同 在IIS6及IIS7.0以上的经典模式中配置httpMod ...
- apache端口被占用
1.80端口被占用,先去服务里将IIS关闭掉,然后重启apache,如果还是继续弹窗the requested operation has failed...需要去Internet信息服务里面停止 ...
- mahout源码分析之Decision Forest 三部曲之二BuildForest(1)
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. BuildForest是在mahout-examples-0.7-job.jar包的org\apache ...
- 《think in python》学习-7
think in python 7 迭代 对一个变量可以进行多次赋值 是合法的. 例如以下: bruce = 5 print bruce bruce = 7 print bruce 因为有了多重赋值 ...
- UVA 10305 Ordering Tasks
题意: 给出n和m,n代表总共有几个箱子.接下来m行,每行有a,b,表示b在a之后.输出一个合理的序列. 分析: 简单的拓扑排序: 代码: #include <iostream>#incl ...
- An error has occurred,See error log for more details
解决Eclipse3.2配合MyEclipse5.0M2使用时打开JSP发生“An error has occurred,See error log for more details”错误的解决方法 ...