约瑟夫问题程序实现
2011-10-05 16:38
267 查看
问题:已知n个人(以编号1,2,3,...,n表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从开始报数,数到m的那个人又出列;以此规律重复下去,知道圆桌周围的人全部出列。
编码实现:
编码实现:
#include <iostream> #include <stdlib.h> #include <stdio.h> using namespace std; typedef struct LNode { int data; struct LNode *link; }LNode, *LinkList; void JOSEPHUS(int n, int k, int m)//n为总人数,k为第一个开始报数的人,m为出列者喊到的数 { //r为当前节点,p为辅助节点,指向r的后继节点 LinkList p, r, curr; //create CircleLinkTable p = (LinkList)malloc(sizeof(LNode)); p->data =1; p->link = p; curr = p; for(int i = 2; i<=n; i++) { LinkList t=(LinkList)malloc(sizeof(LNode)); t ->data =i; t ->link = curr->link; curr ->link =t; curr =t; } //把当前指针移动到第一个报数的人 while(k--) { r = p; p = p->link; } //开始数数 while(n--) { int s = m-1; while(s) { s =s-1; r = p; p=p ->link; } r->link=p->link; cout <<p->data<<endl; free(p); p = r ->link; } } int main(int argc, char* argv[]) { JOSEPHUS(13, 4, 2); return 0; }
相关文章推荐
- [导入]编写程序实现约瑟夫(Josephu)问题(C)
- 编写程序实现约瑟夫(Josephu)问题(C)
- 约瑟夫问题,“遍历”思想.(C语言实现)
- 打靶问题的程序实现
- 约瑟夫问题(Josephus)链表实现
- 赛码网,股神问题,用C语言自己实现的一个程序,仅供参考
- js实现杯子倒水问题自动求解程序
- 这是一道数学类的问题,对=于这类的问题,当然我们要列出数学公式,用程序实现它可以了
- 程序休眠问题的C代码实现
- C程序(约瑟夫问题、5子棋、发牌、整数转化成2进制,sizeof()问题),打印空心实心菱形
- 程序设计大赛--约瑟夫问题
- java程序实现一个有趣的买啤酒问题
- 中国象棋程序的设计与实现(六)--N皇后问题的算法设计与实现(源码+注释+截图)
- 【微信小程序常见问题】点击指定文字实现指定文字变色解决方案一
- 约瑟夫问题简单实现-循环链表
- 约瑟夫问题用链表实现
- 约瑟夫问题 循环链表实现和数字处理实现
- 从易到难编写C++程序,(4)问题:实现一个大整数表示的BigInt类
- 约瑟夫问题(循环链表实现)
- 约瑟夫问题的PHP实现——猴子选大王的问题