约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
// 13_3.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> #include <conio.h> #include <string.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) { //create the cycle link list Linklist p,l,curr,r; p = (Linklist)malloc(sizeof(LNode)); p->data = 0; p->link = p; curr = p; for (int i = 0; i < n; i++) { l = (Linklist)malloc(sizeof(LNode)); l->data = i; l->link = curr->link; curr->link = l; curr = l; } //p->link = curr; //find the first occurrence of k r = p; while (k--) { r = p; p = p->link; } while (n--) { for (int s = m - 1; s >= 0; s--) { r = p; p = p->link; } r->link = p->link; cout << "The deleted value is: " << p->data << endl; free(p); //prepare for next time while loop p = r; } } int _tmain() { JOSEPHUS(13,4,1); return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。