資源簡介
假設某銀行有n個窗口對外接待客戶,從早晨銀行9點開門起到5點關門,不斷有客戶進入銀行,由于每個窗口在某個時刻只能接待一個客戶。因此在客戶人數眾多時需要在每個窗口前順次排隊,對于剛進銀行的客戶。如果某個窗口的業務員正空閑,則可上前輸業務。反之,若個窗口均有客戶所占,他便會排在為數最少的隊伍后面。編制一個程序模擬銀行的這種業務活動并計算一天中客戶在銀行的平均逗留時間。
首先從題目分析:N個窗口排隊,首先就要建立N個隊列來存儲排隊的用戶信息 ,然后算出那個隊列最短就用戶就到那個隊伍排隊,同時通過隨機生成他辦理業務的時間和到來的時間,通過計算用戶的到來時間和離開時間就可以計算出某個用戶在銀行的逗留時間 ;話不多說直接上代碼。
下面是主函數,由用戶輸入銀行上下班時間,計算營業多長時間Total_time,如何當前時間小于關門的時間,就一直進入customer_into();函數,用戶不斷的進來
#define FALSE 0
#define TRUE 1
#define QUEUE_SUM 4 //窗口的數量
int rand_business_time=0, rand_wait_time=0;//定義辦理時間,等待時間變量
int Total_time=0,now_tim=0;//總時間,當前時間
int go_time[4] = {0,0,0,0};//定義數組存儲每個窗口最后一位辦理完業務的時間
int sum_nan[4] = {0,0,0,0};//定義數組存儲每個窗口排隊的人數
int Sign=TRUE; //是否關門標志位
float Sum_Wait_Time=0.0; //等待的總時間
float Sun_Nan=0.0; //總人數
int open_time;//開門時間
int off_time; //關門時間
int main()
{
Prompted();
printf("輸入銀行的24小時制營業時間:如營業時間為9:00--17:00,則應輸入:9,17\n");
scanf("%d,%d", &open;_time,&off;_time);
Total_time = (off_time - open_time) * 60;//計算銀行總營業多少分鐘
for (int i = 0; i now_time)
{
customer_into(); //客戶進入函數
}
printf("銀行關門時間到不再接收客人\n\n");
for (int i = 0; i < QUEUE_SUM; i++)
{
DisposeQueue(&queue;[i],i);//輸入在銀行關門前還沒有辦理完業務的客戶信息
}
printf("平均時間為%.2f分鐘",Sum_Wait_Time/Sun_Nan); /*通過各個客戶的總等待時間總和/總人數算出逗留平均時間*/
_getch();
return 0;
}
代碼片段和文件信息
#include
#include
#include
#include
#include
#define?true?1
#define?false?0
#define?QUEUE_SUM?4??//窗口的數量
//1,首先定義隊列,存儲用戶的到達時間,離開時間,等待時間,辦理業務時間,開始辦理時間
typedef?struct?Node1
{
????int?arrivd_time;?//到達時間
????int?wait_time;??//等待時間
????int?leave_time;?//離開時間
????int?business_time;?//辦理業務時間
????int?star_time;???//開始辦理時間
????Node1?*next;
}Node;
typedef?struct?
{
????Node?*front;?
????Node?*rear;
}Queue;
//隊列初始化
void?initQueue(Queue?*q)
{
????q->front?=?q->rear?=?(Node?*)malloc(sizeof(Node));
????if?(!q->front)
????{
????????return;
????}
????q->front->next?=?NULL;
}
//判斷隊空
int?isEmpty(Queue?*q)
{
????if?(q->front?==?q->rear)
????{
????????return?true;
????}
????else
????{
????????return?false;
????}
}
//入隊
void?Enqueue(Queue?*q?Node?*data)
{
????Node?*repareInsert?=?(Node?*)malloc(sizeof(Node));
????Node?*temp_data?=?data;
????if?(repareInsert?==?NULL)
????{
????????exit(0);
????}
????q->rear->arrivd_time?=?temp_data->arrivd_time;
????q->rear->wait_time?=?temp_data->wait_time;
????q->rear->leave_time?=?temp_data->leave_time;
????q->rear->business_time?=?temp_data->business_time;
????q->rear->star_time?=?temp_data->star_time;
????q->rear->next?=?repareInsert;
????q->rear?=?repareInsert;
}
//2,定義一個數組存放四個隊列并初始化
Queue?first_queue?second_queue?third_queuefourth_queue;//定義四個隊列
//下面是主函數,由用戶輸入銀行上下班時間,計算營業多長時間Total_time如何當前時間小于關
//門的時間,就一直進入customer_into();函數,用戶不斷的進來
int?rand_business_time=0?rand_wait_time=0;//定義辦理時間,等待時間變量
int?Total_time=0now_time=0;//總時間當前時間
int?go_time[4]?=?{0000};//定義數組存儲每個窗口最后一位辦理完業務的時間
int?sum_nan[4]?=?{0000};//定義數組存儲每個窗口排隊的人數
int?Sign=true;??//是否關門標志位
float?Sum_Wait_Time=0.0;??//等待的總時間
float?Sun_Nan=0;??//總人數
int?open_time;//開門時間
int?off_time;?//關門時間
//下面的客戶進來函數,首先通過生成兩個隨機數?rand_business_time辦理業務的時間,//rand_wait_time這個人用戶與上一個用戶進來銀行的時間差,其他的下面注釋已經寫的很清楚了
//用戶進隊函數
/*void?customer_into()?{
????int?which_queue_free=0;
????rand_time();//獲取兩個隨機數
????Leave_Queue();//查詢各個隊列的隊首的那個客戶是否已經辦理完業務
????Leave_Queue();//如何辦理完就出隊,進行四個查詢,是因為有可能下一個用戶到來前某個隊列
????Leave_Queue();//有多個用戶辦理完業務,離開。因為每個用戶到來的時間間隔控制在五分鐘內
????Leave_Queue();//用戶辦理時間控制在1分鐘到30分鐘內所以四次判斷即可
????which_queue_free?=?Fing_Queue_free();//獲取那個隊列最短
????if?(Sign)//判斷是否已經到了關門時間
????{
????????Node?*data;??//定義一個結構體
????????data?=?(Node*)malloc(sizeof(Node));?
????????data->arrivd_time?=?now_time;//存儲用戶到來的時間
????????data->business_time?=?rand_business_time;//存儲用戶辦理業務的時間
????????if?(go_time[which_queue_free]?==?0||now_time>go_time[which_queue_free])
????????//判斷當前隊列是否為空
????????{
????????????data->leave_time?=?now_time?+?rand_business_time;//離開時間等現在時間加辦理完業務的時間
????????????data->wait_time?=?rand_business_time;//逗留時間等于辦理業務的時間
????????????data->star_time?=?now_time;?//開始辦理業務時間等于當前時間
????????}
????????else
????????{
????????//如果當前隊列不為空
????????????data->leave_time?=?go_time[which_queue_free]?+?rand_business_time;//離開時間等于上一個人離開時間加上辦理業務的時
- 上一篇:C語言判定一棵二叉樹是否為二叉搜索樹的方法分析
- 下一篇:C語言編寫的超市結算系統
評論
共有 條評論