170 lines
3.5 KiB
C++
170 lines
3.5 KiB
C++
|
#include <iostream>
|
|||
|
#include <queue>
|
|||
|
#include <iomanip>
|
|||
|
using namespace std;
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
char name;
|
|||
|
int ArrivalTime;
|
|||
|
int ServiceTime;
|
|||
|
int FinishedTime;
|
|||
|
int WholeTime;
|
|||
|
double WeightWholeTime;
|
|||
|
}RR;
|
|||
|
|
|||
|
static queue<RR>RRqueue; //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
static double AverageWT =0,AverageWWT=0;
|
|||
|
static int q; //ʱ<><CAB1>Ƭ
|
|||
|
static int n; //<2F><><EFBFBD≯<EFBFBD><CCB8><EFBFBD>
|
|||
|
static RR RRarray[100]; //<2F><><EFBFBD>̽ṹ
|
|||
|
|
|||
|
void Input()
|
|||
|
{
|
|||
|
|
|||
|
|
|||
|
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
cout<<"________________________________________________________"<<endl;
|
|||
|
|
|||
|
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|||
|
cin>>n;
|
|||
|
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD> ";
|
|||
|
cin>>q;
|
|||
|
|
|||
|
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:"<<endl;
|
|||
|
for (int i=0;i<n;i++)
|
|||
|
{
|
|||
|
cin>>RRarray[i].name;
|
|||
|
}
|
|||
|
|
|||
|
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵ĵ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>:"<<endl;
|
|||
|
for (int i=0;i<n;i++)
|
|||
|
{
|
|||
|
cin>>RRarray[i].ArrivalTime;
|
|||
|
}
|
|||
|
|
|||
|
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵ķ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>:"<<endl;
|
|||
|
for (int i=0;i<n;i++)
|
|||
|
{
|
|||
|
cin>>RRarray[i].ServiceTime;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void RRAlgorithm()
|
|||
|
{
|
|||
|
char processMoment[100]; //<2F>洢ÿ<E6B4A2><C3BF>ʱ<EFBFBD><CAB1>Ƭp<C6AC><70>Ӧ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
RRqueue.push(RRarray[0]);
|
|||
|
|
|||
|
int processMomentPoint = 0;
|
|||
|
int CurrentTime=0;
|
|||
|
int tempTime;
|
|||
|
int i=1; //ָ<><D6B8><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD>̵<EFBFBD><CCB5>±<EFBFBD>
|
|||
|
int finalProcessNumber = 0; //ִ<><D6B4>RR<52>㷨<EFBFBD><EFBFBD><F3A3ACBD>̵ĸ<CCB5><C4B8><EFBFBD>
|
|||
|
int processTime[50];
|
|||
|
|
|||
|
//CurrentTime<6D>ij<EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
if (RRarray[0].ServiceTime>=q)
|
|||
|
{
|
|||
|
CurrentTime = q;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
CurrentTime = RRarray[0].ServiceTime;
|
|||
|
}
|
|||
|
|
|||
|
while(!RRqueue.empty())
|
|||
|
{
|
|||
|
for (int j=i;j<n;j++) //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵ĵ<CCB5><C4B5><EFBFBD>ʱ<EFBFBD><CAB1>С<EFBFBD>ڵ<EFBFBD>ǰʱ<C7B0><CAB1><EFBFBD>Ľ<EFBFBD><C4BD>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
if (RRarray[j].name!=NULL && CurrentTime >= RRarray[j].ArrivalTime)
|
|||
|
{
|
|||
|
RRqueue.push(RRarray[j]);
|
|||
|
i++;
|
|||
|
}
|
|||
|
}
|
|||
|
if (RRqueue.front().ServiceTime<q)
|
|||
|
{
|
|||
|
tempTime = RRqueue.front().ServiceTime;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
tempTime = q;
|
|||
|
}
|
|||
|
|
|||
|
RRqueue.front().ServiceTime -= q; //<2F><><EFBFBD><EFBFBD>ÿִ<C3BF><D6B4>һ<EFBFBD>Σ<EFBFBD><CEA3>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> -q
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
processMoment[processMomentPoint] = RRqueue.front().name;
|
|||
|
processMomentPoint++;
|
|||
|
processTime[finalProcessNumber] = tempTime;
|
|||
|
finalProcessNumber++;
|
|||
|
|
|||
|
|
|||
|
if (RRqueue.front().ServiceTime <= 0) //<2F><>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
//RRqueue.front().FinishedTime = CurrentTime;
|
|||
|
RRqueue.pop(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵ķ<CCB5><C4B7><EFBFBD>ʱ<EFBFBD><CAB1>С<EFBFBD>ڵ<EFBFBD><DAB5>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>β
|
|||
|
RRqueue.push(RRqueue.front());
|
|||
|
RRqueue.pop();
|
|||
|
}
|
|||
|
CurrentTime += tempTime;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
for (int i=0;i<n;i++)
|
|||
|
{
|
|||
|
RRarray[i].WholeTime = RRarray[i].FinishedTime - RRarray[i].ArrivalTime;
|
|||
|
RRarray[i].WeightWholeTime = (double)RRarray[i].WholeTime/RRarray[i].ServiceTime;
|
|||
|
}
|
|||
|
|
|||
|
double x=0,y=0;
|
|||
|
for (int i=0;i<n;i++)
|
|||
|
{
|
|||
|
x += RRarray[i].WholeTime;
|
|||
|
y += RRarray[i].WeightWholeTime;
|
|||
|
}
|
|||
|
|
|||
|
AverageWT = x/n;
|
|||
|
AverageWWT = y/n;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void display()
|
|||
|
{
|
|||
|
cout<<"________________________________________________________"<<endl;
|
|||
|
cout<<"RR<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㷨ִ<EFBFBD>к<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>"<<endl;
|
|||
|
cout<<setw(10)<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<EFBFBD><EFBFBD>"<<" ";
|
|||
|
cout<<setw(10)<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>"<<" ";
|
|||
|
cout<<setw(10)<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>"<<" ";
|
|||
|
cout<<setw(10)<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>"<<" ";
|
|||
|
cout<<setw(10)<<"<EFBFBD><EFBFBD>תʱ<EFBFBD><EFBFBD>"<<" ";
|
|||
|
cout<<setw(10)<<"<EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD>תʱ<EFBFBD><EFBFBD>"<<endl;
|
|||
|
for (int i = 0;i<n;i++)
|
|||
|
{
|
|||
|
cout<<setw(10)<<RRarray[i].name<<" ";
|
|||
|
cout<<setw(10)<<RRarray[i].ArrivalTime<<" ";
|
|||
|
cout<<setw(10)<<RRarray[i].ServiceTime<<" ";
|
|||
|
cout<<setw(10)<<RRarray[i].FinishedTime<<" ";
|
|||
|
cout<<setw(10)<<RRarray[i].WholeTime<<" ";
|
|||
|
cout<<setw(10)<<RRarray[i].WeightWholeTime<<" "<<endl;;
|
|||
|
}
|
|||
|
cout<<"<EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD>̵<EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>תʱ<EFBFBD><EFBFBD> = "<<AverageWT<<endl;
|
|||
|
cout<<"<EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD>̵<EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD>תʱ<EFBFBD><EFBFBD> = "<<AverageWWT<<endl;
|
|||
|
cout<<"________________________________________________________"<<endl;
|
|||
|
}
|
|||
|
|
|||
|
int main()
|
|||
|
{
|
|||
|
Input();
|
|||
|
RRAlgorithm();
|
|||
|
display();
|
|||
|
system("pause");
|
|||
|
return 0;
|
|||
|
}
|