เฉลยและวิธีทำแบบทีละขั้น 2024Oct-FE-PM

05_2024A_FE-B_Questions_Final_Translated.pdf (1.6 MB)


Q1


Q2

คำตอบ: เลือกชุด g)
วิธีทำ: เงื่อนไข “หลักสุดท้ายเป็น 3” คือ prod_id mod 10 = 3 และจำนวนคูปองเท่ากับ floor(pur_prod ÷ 3).


Q3

คำตอบ: เลือกชุด f)
วิธีทำ: เดินอาร์เรย์เพื่อเก็บค่า max1 (มากสุด) และ max2 (รองมากสุด). เมื่อเจอค่ามากกว่า max1 ⇒ เลื่อน max1 ลง max2 แล้วอัปเดต max1; กรณีไม่ใช่แต่ยังมากกว่า max2 ⇒ อัปเดต max2. โค้ดจึงเป็น if (array[i] > max1) {max2←max1; max1←array[i]} elseif (array[i] > max2) {max2←array[i]}.


Q4

คำตอบ: เลือกชุด c)
วิธีทำ: แยกตัวประกอบเฉพาะด้วยการลองหารทีละ (i) จาก 2 ขึ้นไป: ถ้า num mod i = 0 ก็พิมพ์ (i), แบ่ง num ← num ÷ i แล้วพิมพ์ “×” ต่อเมื่อยังมีตัวประกอบเหลือ (num > 1).


Q5

คำตอบ: เลือกชุด b)
วิธีทำ: ค่าเฉลี่ยเรขาคณิต GM=(\prod a_i)^{1/n} จึงใช้ pow(product, 1 ÷ n).


Q6

คำตอบ: เลือกชุด h)
วิธีทำ: ตัวแยกแยะ D=b^2-4ac. ถ้า D>0 มีสองราก, ถ้า D=0 มีรากซ้ำ. ดังนั้น A: b × b − 4 × a × c, B: discriminant > 0, C: discriminant = 0.


Q7

คำตอบ: เลือกชุด c)
วิธีทำ: สูตรเวียนของ LCS: ถ้าอักษรท้ายเท่ากัน ⇒ 1 + lcs(m-1,n-1); ไม่เท่ากัน ⇒ max(lcs(m,n-1), lcs(m-1,n)). ดังนั้นเติม n-1 และ n.


Q8

คำตอบ: เลือก c) ออกเป็น "J", "M", "F", "K", "E", "L"
วิธีทำ: คิวลำดับความสำคัญ “เลขน้อยสำคัญสูงกว่า” และภายในความสำคัญเดียวกันเป็น FIFO. จำลองตามลำดับ enqueue/dequeue ตามโจทย์ จะได้คิวคงเหลือก่อนวนพิมพ์: prio1 = J,M; prio2 = F,K; prio3 = E,L แล้วดึงออกตามลำดับนั้น.


Q9

คำตอบ: เลือก b) คือ 1, 2, 3, 5, 4
วิธีทำ: DFS จากโหนด 1 ด้วยลูป i=1..n ตามเมทริกซ์: 1→2→3 (ย้อนกลับ) →5→4. คำสั่ง for i=1..n ทำให้ลำดับลูกถูกเรียกตามหมายเลขน้อยไปมาก จึงได้ลำดับดังกล่าว.


Q10

คำตอบ: เลือก e) (prev.next ← newNode)
วิธีทำ: แทรกโหนดหลังตัวชี้ prev: ตั้ง newNode.next ← prev.next แล้วต้อง “เกี่ยว” โหนดก่อนหน้าให้ชี้มายังโหนดใหม่ ⇒ prev.next ← newNode.


Q11

คำตอบ: เลือกชุด f)
วิธีทำ: เป็น Insertion Sort: ขยับสลับ A[k] กับ A[k-1] จนกว่าจะเรียงถูก แล้วลด k ลงทีละ 1 (k ← k - 1).


Q12

คำตอบ: เลือกชุด b)
วิธีทำ: ตรวจพาลินโดรมด้วย two-pointers: ถ้า s[left] = s[right] ให้ left++ และ right--; ถ้าไม่เท่ากันให้ ok ← false. ดังนั้น B ต้องเป็น right ← right − 1.


Q13

คำตอบ: เลือกชุด e)
วิธีทำ: โพรบเชิงเส้น: ขณะที่ช่องไม่ว่าง (hashTable[index][1] ≠ undefined) ให้ขยับ index เพิ่มทีละ 1 และถ้าถึงท้ายตาราง (index = size) ให้วนกลับเป็น 1.


Q14

คำตอบ: เลือก e){0.1, 0.3, 0.5, 0.7, 1}
วิธีทำ: ใช้ j = floor(q*(n-1)) กับ (n=10) และเลือก sortedData[j+1] สำหรับ q = 0, 0.25, 0.5, 0.75, 1. จะได้ดัชนี 1,3,5,7,10 ตามลำดับ.


Q15

คำตอบ: เลือกชุด a)
วิธีทำ: ต้องการเมทริกซ์ความน่าจะเป็นล่วงหน้า 3 วัน: เริ่ม dmat=pmat แล้วคูณกับ pmat 2 ครั้ง (เพื่อได้ (pmat^3)). การคูณเมทริกซ์ใช้ผลบวก (\sum_k dmat[i,k]\cdot pmat[k,j]). จึงเป็น A: 2, B: dmat[i,k] × pmat[k,j].


Q16

คำตอบ: เลือกชุด d)
วิธีทำ: ให้ minLength เป็นความยาวสั้นสุด ⇒ ถ้า length2 < length1 ให้ minLength ← length2. นับต่างตำแหน่งเมื่ออักษร “ไม่เท่ากัน”. ส่วนส่วนเกินของสตริงที่ยาวกว่าให้บวก remainingLength เข้า distance. จึงเป็น not equal to และ distance + remainingLength.


Q18

คำตอบ: d) 53 บิต
วิธีทำ: A6GmyVyOC มีตัวเล็ก+ตัวใหญ่+ตัวเลข ⇒ (R=62), ยาว (L=9). เอนโทรปี E=\lfloor L\log_2 R\rfloor=\lfloor 9\cdot \log_2 62\rfloor\approx \lfloor 9\cdot 5.954\rfloor=\lfloor 53.586\rfloor=53.


Q19

คำตอบ: เลือกชุด d)
วิธีทำ: ต้อง “ลงลายมือชื่อดิจิทัล” เพื่อพิสูจน์ว่า L เป็นผู้ส่งจริงและข้อมูลไม่ถูกแก้ (ลงด้วย กุญแจส่วนตัวของ L) และต้อง “เข้ารหัสเพื่อความลับ” ให้ผู้รับ A อ่านได้เท่านั้น (เข้ารหัสด้วย กุญแจสาธารณะของ A).


Q20

คำตอบ: เลือกชุด c)
วิธีทำ: จากข้อกำหนดต้องมีลายเซ็นดิจิทัล/โครงสร้างกุญแจ ⇒ ควรเตรียม สภาพแวดล้อม PKI และเพื่อกันอินพุตอันตรายที่เลื่อนผ่านมาที่เว็บเซิร์ฟเวอร์ ⇒ ติดตั้ง Web Application Firewall (WAF) หน้าเซิร์ฟเวอร์.