约瑟夫问题解答
来源:互联网 发布:js 数组函数 编辑:程序博客网 时间:2024/06/05 20:56
问题:
编号为1,2,····n的n个人按顺时针做成一圈,一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺时针报数,报到m时停止,这个人出列。从他在顺时针方向上的下一个人开始重新报数,如此下去,直至所有人出列。
下面是用STL中的list
#include <iostream>#include <list>#include <algorithm>using namespace std;int main(){ int i, m = 6,n=20; list<int> ilist; //下面是用链表解决约瑟夫环问题 for (i = 1; i <= 20; i++) ilist.push_back(i); cout << "size= " << ilist.size() << endl; list<int> ::iterator ite; for (ite = ilist.begin(); ite != ilist.end(); ++ite) cout << *ite << ' '; cout << endl; //m %= n;这是错误的 list<int>::iterator pit= ilist.begin(); while (!ilist.empty()) { int i = 1; for (; i < m; i++) if (++pit == ilist.end()) pit = ilist.begin(); printf("%d ", *pit); if((pit=ilist.erase())==ilist.end()) pit = ilist.begin(); //cout << *(pit)<<endl; } system("pause");}
//用自己的循环链表解决
#include < iostream>#include <vector>#include <algorithm>#include <string>#include <climits>using namespace std;struct node { int data; node* next; node() { data = 0; next = nullptr; } node(int x) { data = x; next = nullptr; }};//下面是约瑟夫问题(循环链表的操作)node* node_creat(int n){ node* pRet = nullptr; if (n != 0) { int n_idx = 1; node* p_node = nullptr; p_node=new node[n]; if (NULL==p_node ) { return nullptr; } pRet=p_node; while (n_idx < n) { p_node->data = n_idx; p_node->next = p_node + 1; p_node = p_node->next; n_idx++; } p_node->data = n; p_node->next = pRet; } return pRet;}void Josephus(){ node* pList = NULL, *pIter = NULL; int n = 20, m = 6; pList = node_creat(n); pIter = pList; m %= n; while (pIter != pIter->next) { int i = 1; for (; i < m - 1; i++) { pIter = pIter->next; } //输出第m个节点 printf("%d ", pIter->next->data); pIter->next = pIter->next->next; pIter = pIter->next; } printf("%d\n", pIter->data); delete []pList;//不要忘记释放内存}int main() { Josephus();}
阅读全文
0 0
- 约瑟夫问题解答
- 问题解答
- 问题解答
- 问题解答
- 约瑟夫循环c语言实现 (<<数据结构与算法>>-王曙燕 约瑟夫环问题解答)
- 约瑟夫
- 约瑟夫
- 约瑟夫
- 约瑟夫
- 约瑟夫
- 约瑟夫
- 约瑟夫
- 约瑟夫
- 约瑟夫
- 约瑟夫
- gridview问题解答
- 洗牌问题解答
- CF问题解答
- 【算法作业15】LeetCode 357. Count Numbers with Unique Digits
- 搜索专题 S
- 搜索练习题B-02
- 以前学过智能控制,后来想深 入了解,于是考研,结果没考上,悲催。
- hibernate学习笔记02----持久化对象的状态转换
- 约瑟夫问题解答
- hdu 1260 Tickets
- 串口工具kermit(ubuntu)
- CSS的BFC详解
- REST与RESTFul API最佳实践
- EditText结合过滤器Fileter实现数据过滤效果的设计
- anaconda使用总结
- 58. Length of Last Word
- 28335 cmd文件