做一下倒數兩題,都是在佇列模擬的程式基礎上做點修改測試。
5.找出平均等候時間為1分鐘時,每小時到達的客戶數為多少(試驗時間不少於100小時)。
指定隊伍最大長度10人,模擬100小時。粗略估計答案在10到20之間,所以我在開始輸入的時候為其生成10到20之間的隨機數,通過迴圈不斷去試,直到模擬完的平均等待時間等於1分鐘為止。
//此種情況下,最後計算的結果為18人。bank.cpp -- using class
#include
"queue.h
"#include
#include
//for time()
const
int min_per_hr = 60
;bool newcustomer(double
x);int
main()
}/*wait_time是每位顧客服務時間的計數器,可以這麼想象:
*//*
每有一位顧客到達了隊首,就開始掐表倒計時(1-3分鐘隨機)
*//*
時間一到0,表示服務完畢,下乙個人補上,重新倒計時,如此重複
*/if(wait_time <=0 && !line.isempty()) //
上一位服務完畢且隊伍裡還有人
if(wait_time>0
) wait_time--; //
上一位服務未完畢,保持當前狀態,時間-1
sum_line += line.queuecount(); //
數一下現在隊伍有多少人,把每一分鐘的結果都累加起來
}
//報告結果
if(customers > 0
)
else
cout
<
no customers!\n";
cout
<
done!\n";
if((double)line_wait/served == 1
)
//cout<
//cin>>flag;
//輸入0以終止迴圈
}
return0;
}/*判斷顧客是否到達的函式
*//*
rand_max是能夠生成的最大隨機數,rand()會生成[0,rand_max)之間的隨機數
*//*
因此rand()/rand_max會生成[0,1)之間的隨機數,再乘以x就是[0,x)之間的隨機數
*//*
加上小於1的判斷,生成的數會有1/x的概率小於1,而小於1就表示這一分鐘內有顧客到了
*/bool newcustomer(double
x)
6.再開一台atm,新來的顧客會根據人數拍隊,模擬新的情況,再次找出平均等待時間為1分鐘,每小時到達的客戶數應為多少。
設定每隊最大能容納5人,模擬200小時。平均每小時到達人數從50開始乙個個試。
如果某一隊人比另一隊少的話,新來的顧客就會去那一隊。如果兩隊人一樣多,就隨便選乙個(隨機數)。
//模擬結果:bank.cpp -- using class
#include
"queue.h
"#include
#include
//for time()
const
int min_per_hr = 60
;bool newcustomer(double
x);int
main()
else
if(line.queuecount() >line2.queuecount())
else
else}}
}/*wait_time是每位顧客服務時間的計數器,可以這麼想象:
*//*
每有一位顧客到達了隊首,就開始掐表倒計時(1-3分鐘隨機)
*//*
時間一到0,表示服務完畢,下乙個人補上,重新倒計時,如此重複
*/if(wait_time_1 <=0 && !line.isempty()) //
上一位服務完畢且隊伍裡還有人
if(wait_time_2 <=0 && !line2.isempty())
if(wait_time_1>0
) wait_time_1--; //
上一位服務未完畢,保持當前狀態,時間-1
if(wait_time_2>0
) wait_time_2--;
sum_line_1 += line.queuecount(); //
數一下現在隊伍有多少人,把每一分鐘的結果都累加起來
sum_line_2 +=line2.queuecount();
}//報告結果
if(customers > 0
)
else
cout
<
no customers!\n";
cout
<
done!\n";
cout
<
enter 1 to simulate again,0 to quit: ";
cin>>flag; //
輸入0以終止迴圈
}
return0;
}/*判斷顧客是否到達的函式
*//*
rand_max是能夠生成的最大隨機數,rand()會生成[0,rand_max)之間的隨機數
*//*
因此rand()/rand_max會生成[0,1)之間的隨機數,再乘以x就是[0,x)之間的隨機數
*//*
加上小於1的判斷,生成的數會有1/x的概率小於1,而小於1就表示這一分鐘內有顧客到了
*/bool newcustomer(double
x)
可以看出大約平均每小時到達51或52個顧客,等待時間會保持在1分鐘。但是,我翻來覆去地看**,也不知道為什麼平均等待時間會算出負數來,總覺得**有問題。
C Primer Plus 第11章 筆記
1 如果字串字面量之間沒有間隔,或者用空白字元分隔,c會將其視為串聯起來的字串字面量。2 用標準的陣列初始化模式給字串初始化時,末尾一定要加上 0 不然就不是乙個字串,而是乙個字元陣列。讓編譯器計算陣列的大小只能用在初始化時。4 const char ar1 something is pointin...
C primer plus 第4章 復合型別
1.陣列初始化 2.字串 兩種方式 c 風格字串 以 0結尾 string類庫 單引號表示字元常量 a 是字串編碼的簡寫,char a a 是正確的。但是 a 表示的是兩個字元a和 0組成的字串,實際上 a 表示的是字串所在的記憶體位址,因此char a a 是非法的 1 cin.getline a...
c primer plus 第8章 函式探幽
c 擴 展 了 c 語 言 的 函 數 功 能 通 過 將 inline 關鍵 字 用 於 函 數 定 義 並 在 首 次 調 用 該 函 數 前 提 供 其 函 數 定 義 可 以 使 得c 艹 編 譯 器 將 該 函 數 視 為 內 聯 函 數 也 就 是 說 編 譯 器 不 是 讓 程 序 跳...