民國115年 高考三級 統計 資料處理
第4題
某政府衛生單位設計流感疫情模擬程式,分析不同城市短期內的疫情發 展情況。假設: ⑴初始時已有A 人感染流感。 ⑵目前尚未痊癒之感染者每日會以M%的傳染率產生新增…
題目
某政府衛生單位設計流感疫情模擬程式,分析不同城市短期內的疫情發 展情況。假設: ⑴初始時已有A 人感染流感。 ⑵目前尚未痊癒之感染者每日會以M%的傳染率產生新增感染個案。 ⑶感染者自感染日起經過X 天後痊癒,痊癒後不再具有傳染力。 ⑷每日新增感染人數取整數部分(無條件捨去)。 ⑸城市若能有效施打疫苗,每日傳染率降低為原本的一半。 下列程式模擬C1 與C2 城市,D 天後仍感染流感的人數,其中C1 城市 未施打疫苗,C2 城市則有效施打疫苗,程式中以newCase[]記錄各日新 增感染人數,其中newCase[0]儲存初始感染人數A,請填入(I)~(V)空 格,使程式能正確模擬。另外,請說明程式中使用陣列newCase[]的功 用,以及simulate()的運作邏輯與功能。(25 分) #include <stdio.h> #define MAXDAY 100 int simulate(int A, double M, int X, int D) { int newCase[MAXDAY] = {0}; int add = 0, current = A; newCase[0] = (I) ; for(int day = 1; day < D; day++) { add = current * M / 100; newCase[day] = (II) ; current = (III) + add; if(day >= (IV) ) { current = current - newCase[ (V) ]; } } return current; } int main() { int A=1000, X=5, D=10; double M =10.0; int C1 = simulate(A, M, X, D); int C2 = simulate(A, M/2.0, X, D); printf("C1:%d, C2:%d\n", C1, C2); return 0; }
參考解答(AI 生成,非官方)
- 一、空格答案:(I) A、(II) add、(III) current、(IV) X、(V) day - X。newCase[0]須存初始感染人數A;每日先以current×M/100計算新增add並寫入newCase[day],再將current加上add;當day≥X時,減去X天前新增的newCase[day-X],以反映期滿康復者。
- 二、newCase[]功用:陣列以「日」為索引記錄每日新增感染人數,newCase[0]為初始個案,newCase[d]為第d日新增數。其優點是只需保存每日新增量,即可在X日後依newCase[day-X]扣除康復者,不必逐人儲存感染紀錄;同時可輸出每日新增曲線,記憶體需求為O(D)。
- 三、simulate()邏輯:先初始化陣列與current=A,再逐日計算add=current×M/100,因add為int而無條件捨去小數;寫入newCase[day]後更新current=current+add,並在day≥X時扣除newCase[day-X]。迴圈結束回傳current,即模擬期末仍感染人數;C1用M、C2用M/2,可比較疫苗降低傳染率的效果。
- 四、結果判讀:C2的每日傳染率為C1的一半,新增感染較少,經X日康復扣除後,C2的current通常低於C1,顯示有效施打疫苗可降低疫情規模。惟疫苗並非立即治癒,而是降低傳播;當current很小時,整數捨去可能使add為0,使疫情較快歸零,這是離散模擬的特性。
- 五、限制與建議:MAXDAY固定為100,D須小於100,否則newCase索引越界;M為double但add為int,會持續截斷。模型假設均勻混合、傳染率固定、X日後一定康復,未考慮潛伏期、接觸網絡、移入移出與隨機性。實務上應加入參數驗證、邊界檢查,並以情境分析或隨機模擬補強。
AI 依官方試題文字產生的參考解答,非考選部公告答案,內容僅供備考參考。