复杂约瑟夫环

来源:互联网 发布:samorost3 mac下载 编辑:程序博客网 时间:2024/06/16 22:32
简单约瑟夫环:

约瑟夫环:若干人围成一个环,约定每间隔n个人,第n个人离开,剩下的人继续,直至所有人离开,输出离开顺序。

简单约瑟夫环使用数组即可实现。

复杂约瑟夫环:每个人都持有一个独立的间隔值x,比如第一个人的间隔值x1为3,那么从第一个人开始往后数3,第三个人离开,此时,以第三个人的间隔值x3作为新的间隔值,继续下去。

#include<iostream>#include<cstdlib>#include<ctime>using namespace std;typedef struct man{int data;int flag;int wochi;man *next;};void ManInit(man *head, int n){srand(time(NULL));man *temp = (man *)malloc(sizeof(man));temp = head;head->data = 1;head->flag = 0;srand(time(NULL));head->wochi = rand() * 10 / RAND_MAX + 1;for (int i = 2; i <= n; i++){man *a = (man *)malloc(sizeof(man));a->data = i;a->flag = 0;a->wochi = rand() * 10 / RAND_MAX + 1;temp->next = a;temp = temp->next;}temp->next = head;}void ysf(man *head,int n){man *p, *q;p = head;q = head;int m = head->wochi;int j = 0;int i = 1;while (j < n){cout << "当前的 m 值为 " << m << endl;while (i < m){p = q;q = q->next;i++;}p->next = p->next->next;cout << q->data << " 退出" << endl;m = q->wochi;//free(q);j++;i = 0;}}int main(){man *head = (man *)malloc(sizeof(man));srand(time(NULL));ManInit(head, 20);man *temp = (man *)malloc(sizeof(man));temp = head;for (int i = 0; i < 20; i++){cout << "第 " << temp->data << " 个数的值为 " << temp->wochi << endl;temp = temp->next;}cout << endl;ysf(head, 20);system("pause");return 0;}



原创粉丝点击