面试题45—圆圈中最后剩下的数字
2017-06-27 22:00
393 查看
**题目:约瑟夫环问题
代码示例:**
代码示例:**
#include<iostream> using namespace std; const int MaxSize = 100; class MyQueue { int data[MaxSize]; int front; int rear; public: MyQueue(){ front = 0; rear = 0; } ~MyQueue(){} bool Empty(void); bool Push(int e); bool Pop(int &e); void CreateQueue(int n); void DeleteMthCircle(int m); }; bool MyQueue::Empty(void) { return (front == rear); } bool MyQueue::Push(int e) { rear = (rear + 1) % MaxSize; if (rear != front) { data[rear] = e; return true; } else return false; } bool MyQueue::Pop(int &e) { if (front == rear) return false; front = (front + 1) % MaxSize; e = data[front]; return true; } void MyQueue::CreateQueue(int n) { if (n >= MaxSize) return; cout << "队列中的元素:"; for (int i = 0; i < n; i++) { rear++; data[rear] = i; cout << i << " "; } cout << endl; } void MyQueue::DeleteMthCircle(int m) { cout << "依次删除循环队列中的第"<<m<<"个元素:"; int length = (rear - front + MaxSize) % MaxSize; while (length != 1) { int e; for (int i = 0; i < m - 1; i++) { Pop(e); Push(e); } Pop(e); cout << e << " "; length = (rear - front + MaxSize) % MaxSize; } cout << endl; cout << "剩下的最后一个元素为:" << data[rear] << endl; } int main() { MyQueue myqueue; int n = 5; int m = 3; myqueue.CreateQueue(n); myqueue.DeleteMthCircle(m); return 0; }
相关文章推荐
- 面试题45:圆圈中最后剩下的数字
- 面试题45:圆圈中最后剩下的数字
- 面试题45:圆圈中最后剩下的数字(约瑟夫环问题)
- 剑指offer——面试题45:圆圈中最后剩下的数字(孩子们的游戏)
- 面试题45:圆圈中最后剩下的数字
- 剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题,ZOJ 1088:System Overload类似)题解
- 面试题45:圆圈中最后剩下的数字
- 面试题45-------圆圈中最后剩下的数字(数字)
- 【剑指offer】6.4抽象建模能力——面试题45:圆圈中最后剩下的数字
- 【剑指Offer学习】【面试题45:圆圈中最后剩下的数字(约瑟夫环问题)】
- 剑指Offer面试题45(Java版):圆圈中最后剩下的数字
- 剑指offer——面试题45:圆圈中最后剩下的数字
- 剑指offer-面试题45-圆圈中最后剩下的数字
- 剑指Offer系列-面试题45:圆圈中最后剩下的数字
- 剑指Offer:面试题45 圆圈中最后剩下的数字
- 面试题45:圆圈中最后剩下的数字
- 剑指offer 面试题45—圆圈中最后剩下的数字(约瑟夫环)
- 剑指offer 面试题45 圆圈中最后剩下的数字
- 剑指offer之面试题45圆圈中最后剩下的数字
- 《剑指offer》面试题45 圆圈中最后剩下的数字(Java版本)