您的位置:首页 > 职场人生

面试题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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: