约瑟夫问题

来源:互联网 发布:斗鱼主播唱歌软件 编辑:程序博客网 时间:2024/05/20 19:48
<span style="font-size:18px;">//用循环列表模拟约瑟夫问题/* 解决问题的步骤:  (1)建立一个具有N个链节点、无头节点的循环链表  (2)确定第一个报数人的位置  (3)不段的从链表中删除链节点,直到链表为空 */ #include<iostream> using namespace std; typedef int elemtype; typedef struct Node { elemtype data; struct Node *next; }Node; //创建有n个结点的循环链表 Node *CreatList(int n) { Node*head=(Node*)malloc(sizeof(Node)); Node*p,*s; p=head; int i=1; for(;i<=n;i++) { s=(Node*)malloc(sizeof(Node)); s->data=i; p->next=s; p=s; cout<<s->data<<" "; } s->next=p->next; free(head);  return s->next;  } int main() { int n=41; int k=1;//从第n个人开始 int m=3;//数m出列 Node *q=CreatList(n);  Node*temp;// Node*p=list; while(q!=q->next) { for(int i=1;i<m-2;i++) { q=q->next; } temp=q->next; cout<<temp->data<<" "; q->next=temp->next; free(temp);  } cout<<q->data<<endl;  return 0;               }</span>

0 0
原创粉丝点击