?? class1.cs
字號:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
//定義結構體數組,放顧客進入的相應事件.
public class customer
{
int NO; /*編號*/
int durtime; /*理發所需時間*/
int intime; /*進入理發店時刻*/
int starttime; /*開始理發時刻*/
int interval; /*他的下一個人到來的時間間隔*/
int wait_flag,serve_flag; /*是否在等待,是否在理發*/
int R;
int i;
int j;//判斷當前時間棧中剩余的人數是否為零,若為零則此刻到來的人立即理發,否則入隊等候。
int[] wait;
const int TRUE=1;
const int FALSE=0;
int N1;//剩余的空位。
int totaltime; /*顧客理發所需總時間*/
int start; /*開張時間*/
int curtime; /*當前時間*/
//等待隊列.
int T,N;//開門時間,可用的椅子數.
/*顧客進入理發店*/
public void customer_in(customer n)
{ /*每次產生不同的隨機數*/
int i=0;
i++;
//程序運行結束,totalnum表示進店總人數。
intime=0;
Random ra=new Random();//產生隨機數.
R=ra.Next(10,100);
n.NO=i;
n.intime=curtime; /*記錄顧客進入時間*/
n.durtime=15+R%50; /*產生隨機數記錄顧客理發所需時間*/
n.interval=2+R%10; /*此顧客的下一個顧客來的時間間隔*/
if(n.wait[0]==0&&n.N1>0)
{customer_serve( );} /*有空閑位置并無人參與競爭,調用服務函數*/
else
{
n.wait[0]=1;//等候的顧客總數。
n.wait_flag=TRUE; /*否則入隊等待*/
wait[i++]= n.NO;
}
}
/*為顧客理發*/
public void customer_serve(customer n)
{
n.starttime=curtime;
N1--;
n.serve_flag=TRUE;
n.wait_flag=FALSE;
totaltime+=n.durtime;
}
/*顧客離開理發店*/
public void customer_leave(customer n)
{
n.serve_flag=FALSE;
N1++;
}
public void InitQueue(customer n) //定義一個順序棧,將要等待的人放入棧中
{
i=0;j=0;
wait[i]=0;
}
public void EnQueue(customer n) //將要等候的人入棧。
{
wait[0]++;//程序運行結束,wait[0]表示排隊總人數。wait[0]/totalnum=平均隊長。
wait[++i]=wait_flag;
j++;}
public void DeQueue(customer n) //將棧中接受服務的人刪除。
{
int k=0;
wait[++k]=0;//若等待的人去理發,則將他原先所排的位子賦予0,表是此位無人。
j--;//若最后j=0,則表示無人排對,此刻到來的顧客可立即接受服務。
}
public static void Main()
{
customer u=new customer();
while(u.curtime<u.T) /*當前時間屬于營業時間,允許顧客進入、為顧客服務*/
{
u.curtime++; /*當前時間*/
for(int k=1;k<=u.wait[0];k++)
{ /*判斷有沒有人離開*/
if((u.serve_flag==TRUE)&&(u.starttime+u.durtime==u.curtime))
u.customer_leave(u.wait );
}
while(u.N1>0&&u.j!=0) /*讓等待隊列中的人去理發*/
customer_serve(DeQueue(u.wait));
/*判斷是否有人符合要進的條件*/
if((u.intime+u.interval)==u.curtime)
customer_in( );
}
while(u.j!=0) /* 為等待的顧客服務,但 不允許顧客進來了*/
{
u.curtime++;
for(int k=1;k<=u.i;k++)
{ /*判斷有沒有人離開*/
if((u.serve_flag==TRUE)&&(u.starttime+u.durtime==u.curtime))
customer_leave(u.wait);
}
while(u.N1>0&&u.j!=0) /*讓等待隊列中的人去理發*/
customer_serve(DeQueue(u.wait));
}
Console.WriteLine("顧客總數為:{0}",u.NO);
Console.WriteLine("平均等候時間為:{0}",u.totaltime/u.NO);
Console.WriteLine("平均隊長為:{0}",u.i/u.wait[0]);}}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -