约瑟夫环扩展问题
来源:互联网 发布:忘记mac的开机密码 编辑:程序博客网 时间:2024/05/22 07:43
编号为1~N的N个人按顺时针方向围坐一圈,每人持有一个密码,(正整数,可以自由输入),开始入选一个正整数作为报数上限值M,从第一个人按顺时针方向自1开始顺序报数,报到M时停止报数。报M的人出列,将他的密码作为新的M值,从他的顺时针方向上的下一个人开始从1报数,如此下去,直到所有人出列为止。
具体代码如下:
#include <iostream>using namespace std;typedef struct CListNode{int value;CListNode *next;}CListNode, *CListLink;void Show_(CListLink *lt){if (*lt == NULL){return;}CListNode *p = *lt;while (p->next != *lt){cout << p->value << "-->";p = p->next;}cout << p->value << "-->" << "Node" << endl;}CListNode *Create_N(int n){//无头结点的循环链表CListNode *p = NULL, *head;head = (CListNode*)malloc(sizeof(CListNode));p = head; //指向当前结点int i = 1;srand(time_t(0));CListNode *s = NULL;if (0 != n){while (i <= n){s = (CListNode*)malloc(sizeof(CListNode));s->value = rand()%10 + 1;p->next = s;p = s;i++;}s->next = head->next;}free(head);return s->next;//第一个节点}void ChuLie(int n){CListNode *temp;CListNode *p = Create_N(n);CListNode *q = NULL;Show_(&p);int m = p->value;m %= n;while (p != p->next){if (m <= 1){cout << q->next->value << "-->";temp = q->next;q->next = temp->next;p = temp->next;q = p;}else{for (int i = 1; i < m - 1; ++i){p = p->next;}cout << p->next->value << "-->";temp = p->next; //删除的元素p->next = temp->next;q = p;p = p->next;}m = temp->value;m %= n;free(temp); //删除}cout << p->value << endl;}int main(){int n;cin >> n;ChuLie(n);return 0;}
在对m进行比较值进行分类比较,针对m==0||m==1是一种处理方法,其余是一种处理方法。
显示输出如下:
0 0
- 约瑟夫环扩展问题
- 约瑟夫问题、约瑟夫环
- Josephus约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题(Josephus)
- 约瑟夫环问题--java
- 约瑟夫环问题 Josephus
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 求解约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- CALayer详解
- 字符串的indexof(),substring()和split()的方法
- POJ 1493 Machined Surfaces
- 喝酒
- 集成融云Android SDK实现在群聊/讨论组中@人的功能(二)
- 约瑟夫环扩展问题
- C#开发蓝牙服务端,自动配对以及收发消息
- atlas(keepalived)+mysql(MHA)
- C++第4次实验(求1000以内所有偶数的和)
- C++作业4
- STL总结
- dts
- ios 卡顿,push多次同一个页面
- 各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解