用C++Vector和Queue解决循环报数淘汰问题
来源:互联网 发布:云计算认证考试费用 编辑:程序博客网 时间:2024/06/08 11:14
问题:
100人围成一个圈,每人有一个编码,编码从1到100。他们开始从1开始依次报数,报到M的人自动退出圈圈,然后下一个人接着从1开始报数,直到剩余的人小于M。输出剩下的人原先的号码,M=3时为:58,91,M=4时为34,45,97.
分析:将首位放进Vector的末尾,然后删除首位,当达到报数那一位的时候直接删除首位,不再放进末尾。queue的编程思路相同。
代码1,vector:
void vector_way(){vector<int>a;vector<int>::iterator iter = a.begin();for (int i = 0; i < 100; i++)a.push_back(i + 1);int m;while (1){cin >> m;int j = m;while (a.size()>= m){j = m;while (j - 1){a.push_back(a[0]);a.erase(a.begin());j--;}a.erase(a.begin());}for (int i = 0; i < m - 1; i++)cout << a[i] << endl;;}}代码2,queue:
void queue_way(){queue<int>q;int n;int m;while (1){cin >> m;int j = m;for (int i = 1; i <= 100; i++)q.push(i);while (q.size() >= m){j = m;while (j - 1){q.push(q.front());q.pop();j--;}q.pop();}for (int i = 0; i < m - 1; i++){cout << q.front() << endl;q.pop();}system("PAUSE");}}
阅读全文
0 0
- 用C++Vector和Queue解决循环报数淘汰问题
- 用循环链表解决报数淘汰问题
- 用队列解决报数问题
- 有n个人围成一圈,从第1个人开始,1、2、3报数,报至3出局,余下的人继续从1、2、3报数,问:最后剩下的一人是原来的第几号?同时求出被淘汰编号的序列。(要求:用循环队列解决该问题。)
- 循环报数问题
- 循环删除报数问题
- 循环报数问题
- 约瑟夫循环报数问题
- 循环列表解决n个人首位相连报数问题
- [蓝桥杯][java]循环报数问题
- 【C】队列报数问题
- 【C++】利用list和vector实现stack和queue!!!
- C语言指针实现循环报数问题(简单约瑟夫环问题)
- n个人循环报数1-3问题
- n个人循环报数1-3问题
- 循环报数
- 循环报数
- 循环报数
- python requests json data区别
- C# UAC自提升与用户体验
- 【SQL Server学习笔记】7:SELECT数据查询功能的常见扩展
- 软件开发各阶段交付物列表
- Rightmost Digit HDU
- 用C++Vector和Queue解决循环报数淘汰问题
- android:roundIcon="@mipmap/logo_yuan"
- Java多线程--同步屏障CyclicBarrier
- python
- python 第三方库安装技巧
- iOS基础知识2
- MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 解决方法
- spark1.6 windows 开发环境搭建
- Js获取当前日期时间及其它操作