高手来给你做个程序,用具体要求做,高分奖励啊,

来源:百度知道 编辑:UC知道 时间:2024/05/28 03:37:10
有M个敢死队员要炸掉敌人的一碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。
排长是不愿意去的,假设排长为1号,请你设计一程序,求出从第几号战士开始计数才能让排长最后一个留下来而不去执行任务。
要求:至少采用两种不同的数据结构的方法实现。如果采用三种以上的方法者,可加分。

//本程序一共采用了循环队列、环状链表和线段树三种数据结构来实现,其中用线段树来实现的话效率最高

#include <iostream>
#define MAXM 10000
using namespace std;

//1 循环队列
class Queue
{
private:
int head,tail;
int q[MAXM];
public:
Queue(int m)
{
head=0;
for (tail=0;tail<m;tail++) q[tail]=tail;
}
void Enqueue(int x)
{
q[tail++]=x;
if (tail==MAXM) tail=0;
}
int Dequeue()
{
int ans;
ans=q[head++];
if (head==MAXM) head=0;
return ans;
}
};

//2 环状链表
class Linked_List
{
private:
struct Node
{
int id;
Node *next,*pred;
Node()
{
next=0;
pred=0;
}
};
Node *current;
public: