约瑟夫问题(c/c++解决) 淩亂°似流年 2023-05-28 06:52 10阅读 0赞 **问题描述:** 设有n个人围坐在圆桌周围,现从某个位置m(1≤m≤n)上的人开始报数,报数到k的人就站出来。下一个人,即原来的第k+1个位置上的人,又从1开始报数,再报数到k的人站出来。依次重复下去,直到全部的人都站出来为止。试设计一个程序求出这n个人的出列顺序。 #include<iostream> using namespace std; typedef struct Lnode { int data; struct Lnode *next; }Lnode, *Linklist; //循环链表结点类型定义 //创建循环链表 Linklist Initlist(Linklist L, int n) { Linklist q; q = L; L->data = 1; for (int i = 2; i <= n; i++) { Linklist p; p = (Lnode*)malloc(sizeof(Lnode)); p->data = i; p->next = NULL; q->next = p; q = p; } while (q->next == NULL) { q->next = L; } return L; } //删除报数为k的结点 Linklist Deletelist(Linklist L, int m, int k, int n, int w) { Linklist p, q; p = q = L; if (m == 1) { if (n == w); else { for (int i = 0; i < k-m; i++) { p = p->next; } } } else { for (int i = m; i < m + k - 1; i++) { p = p->next; } } q = p->next; p->next = q->next; q->next = NULL; free(q); L = p; return L; } //获取报数为k的序号 int Getnumlist(Linklist L, int m, int k, int n,int w) { Linklist p; p = L; if (m == 1) { if (n == w) for (int i = 0; i < k - m; i++) { p = p->next; } else for (int i = 0; i < k - m + 1; i++) { p = p->next; } } else { for (int i = m; i < m + k; i++) { p = p->next; } } return p->data; } int main() { int n,m,k; cout << "有__个人围坐在圆桌周围,请输入:"; cin >> n; cout << "从某个位置__上的人开始报数,请输入:"; cin >> m; cout << "报数到__的人就站出来,请输入:"; cin >> k; int num, *a, i = 0,w; w = n; Linklist L; L = (Lnode*)malloc(sizeof(Lnode)); L = Initlist(L, n); a = (int*)malloc(sizeof(int)*n); while (n != 0) { num = Getnumlist(L, m, k,n,w); a[i++] = num; L = Deletelist(L, m, k,n,w); n--; } cout << "这" << w << "人的出列顺序为:"; for (int i = 0; i < w; i++) { cout << a[i] << " "; } cout << endl; return 0; }
相关 约瑟夫问题 约瑟夫问题 作者:Ackarlix 这是一个非常经典的问题:n个骑士编号1,2,...,n,围坐在圆桌旁,编号为k的骑士从1开始报数,报到m的骑士出列,然后下一个位置再从1 刺骨的言语ヽ痛彻心扉/ 2022年09月19日 13:29/ 0 赞/ 199 阅读
相关 约瑟夫问题 约瑟夫问题如下: n个人围成一圈,从1号开始报数,报到m就退出,剩下的人从下一个人开始继续报数。。。问最后剩下的是谁?也可问每个人的死亡顺序. 这一题在数据量比较小的 太过爱你忘了你带给我的痛/ 2022年08月10日 17:55/ 0 赞/ 144 阅读
相关 约瑟夫问题 约瑟夫环问题:一圈共有N个人,开始报数,报到M的人自杀,然 后重新开始报数,问最后自杀的人是谁? ![Center][] 第一种方法:循环思想 待我称王封你为后i/ 2022年08月08日 00:39/ 0 赞/ 179 阅读
相关 约瑟夫问题 适合队列初学者 \include<queue> //队列 头文件 queue<int>q; //定义队列q,I ゝ一世哀愁。/ 2022年08月04日 04:10/ 0 赞/ 174 阅读
相关 约瑟夫问题 Problem Description n个人想玩残酷的死亡游戏,游戏规则如下: n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被 £神魔★判官ぃ/ 2022年07月14日 12:44/ 0 赞/ 174 阅读
相关 约瑟夫问题 约瑟夫问题 Time Limit: 1000MS Memory Limit: 65536KB [Submit][] [ Statis 分手后的思念是犯贱/ 2022年06月18日 05:24/ 0 赞/ 177 阅读
相关 约瑟夫问题 <table> <tbody> <tr> <td>成绩</td> <td>10</td> <td>开启时间</td> <td>2017 ╰半夏微凉°/ 2022年06月02日 08:57/ 0 赞/ 273 阅读
相关 约瑟夫问题 1.知识点:循环链表 2.题意:n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,请输出最后一个人的编号 3.注意事项: 心已赠人/ 2022年05月30日 04:46/ 0 赞/ 170 阅读
相关 约瑟夫问题 Problem Description n个人想玩残酷的死亡游戏,游戏规则如下: n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人 我就是我/ 2022年05月16日 06:06/ 0 赞/ 184 阅读
相关 约瑟夫问题 约瑟夫问题 ![在这里插入图片描述][20181114211743434.jpg] 题目描述: 开始有5个人围成圆形,从0号开始,数2个人,谁被数到就 灰太狼/ 2022年04月16日 00:46/ 0 赞/ 196 阅读
还没有评论,来说两句吧...