การนำ Selection และ Iteration มาใช้
แนะนำใหม่| English | ความหมาย |
|---|---|
| accumulator/əˈkjuːmjʊleɪtə/ | ตัวสะสม |
ค่าเริ่มต้นสูงสุดเป็นศูนย์สร้างผลลัพธ์ขึ้นมาเอง
- อาร์เรย์ประกอบด้วย −8, −3 และ −11 การเริ่ม max ที่ศูนย์จะทำให้ได้ค่าสูงสุดที่เคยมีในอาร์เรยมาก่อน
- สำหรับ array นี้ที่ไม่ใช่ค่าว่าง เริ่ม max ที่ a[0]; การเปรียบเทียบค่าต่อไปจะอัปเดต −8 เป็น −3 และคงค่าไว้นั้น
รูปแบบลูป: สะสม
- รูปแบบลูป (loop pattern) คือสูตรที่ใช้ซ้ำได้สำหรับงานทั่วไป รูปแบบสะสม (accumulator pattern) สร้างผลรวมหรือผลคูณสะสมตลอดรอบการวนลูป
- เริ่มต้นที่
sum = 0, จากนั้นsum = sum + xอยู่ภายในลูป; ค่ารวมที่สะสมจะเปลี่ยนแปลง; ค่าอาจลดลงเมื่อเพิ่มค่าลบเข้าไปด้วย หลักการเดียวกันนี้ใช้ได้กับ count ที่สะสม (count++) หรือ max ที่สะสม
เงื่อนไขภายในลูป
- วาง
ifภายใน ลูปเพื่อทำงานเฉพาะกับรายการที่ตรงกัน "นับจำนวนคู่": ลูป และif (x % 2 == 0) count++; - ลูปจะ遍历ทุกรายการ;
ifจะตัดสินใจว่ารายการใดควรดำเนินการ การผสมผสานการเลือกและการทำซ้ำคือหัวใจของอัลกอริทึมส่วนใหญ่
การหาค่าสูงสุด
- เพื่อหาค่าสูงสุด ให้คงตัวแปร
maxไว้ และอัปเดตเมื่อเจอสิ่งที่ใหญ่กว่า ตรวจสอบว่าอาร์เรย์ไม่ว่าง เริ่มmaxที่ค่าแรกแล้วตรวจสอบส่วนที่เหลือ “ตัวเลขที่เล็กมากที่ไม่ระบุ” อาจยังมากกว่าข้อมูลจริงทั้งหมด if (x > max) { max = x; }Within the loop. After the loop,maxholds the largest value seen.
รูปแบบตัวสะสม (Accumulator pattern)
sum สะสมผลข้ามรอบ; เริ่มที่ 0
เพื่อสร้างผลรวมสะสมในลูป ควรเริ่มต้นตัวสะสมไว้ที่...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ผลรวมเริ่มที่ 0; ผลคูณควรเริ่มที่ 1
เพื่อสร้างผลคูณสะสม ควรเริ่มต้นตัวสะสมไว้ที่...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
การเริ่มผลคูณที่ 0 จะทำให้ผลลัพธ์เป็น 0 เสมอ; ให้เริ่มที่ 1
ในการนับจำนวนเลขคู่ขณะวนลูป คุณต้องใช้...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
The if เลือกว่าลูปจะนับรายการใดบ้าง
การวางการเริ่มต้นของตัวสะสมภายในลูปจะทำให้รีเซ็ตมันทุกครั้งที่วน
Difficulty 1/5 · 100 coins + a small bonus on first completion today
เริ่มต้นก่อนลูป ไม่ใช่ภายในลูป
เพื่อหยุดลูปทันทีเมื่อพบเป้าหมาย คุณสามารถใช้...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
break ออกจากรูปแบบซ้ำชั้นในที่สุด ตัวแปร BOOLEAN flag ยังจำเป็นต้องใช้ในเงื่อนไขรูปแบบซ้ำหรือตรรกะควบคุม; การกำหนดค่ามันเพียงอย่างเดียวไม่หยุดการดำเนินการ
การออกจากลูปก่อนกำหนดด้วยตัวบ่งชี้หรือ break
- บางครั้งคุณสามารถหยุดได้เร็วขึ้นเมื่อพบสิ่งที่ต้องการ A
booleanflag สามารถบันทึก “พบแล้ว”并被loop condition check; การกำหนดค่าflagเพียงอย่างเดียวจะไม่ออกจากลูปbreakจะออกจากลูปชั้นในทันที - "รายการนี้มีเลขศูนย์หรือไม่?" — หยุดที่เลขศูนย์ตัวแรก; การออกก่อนกำหนดประหยัดงานแต่ต้องรักษาตรรกะให้ถูกต้องสำหรับกรณี "ไม่พบ"
เริ่มค่าสะสมให้ถูกต้อง มิฉะนั้นผลลัพธ์ทั้งหมดจะผิดพลาด sum เริ่มที่ 0, product เริ่มที่ 1 (เริ่ม product ที่ 0จะทำให้มันเป็น 0 เสมอ), max เริ่มที่องค์ประกอบแรกหลังตรวจสอบว่า array ไม่ว่าง;集合为空时没有最大值除非合约明确定义了单独的结果。และอัปเดตมันทุกรอบที่ตรง条件 — การเริ่มต้น misplaced within the loop จะรีเซ็ตค่าในแต่ละรอบและทำลายผลรวม
What is the maximum of the nonempty array {−8, −3, −11}?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
−3 is the greatest actual element. Starting at 0 produces an invalid invented candidate.
การอ่าน a[0] เป็นวิธีที่ถูกต้องในการเริ่มต้นค่าสูงสุดสำหรับอาร์เรย์ว่าง
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ไม่มีองค์ประกอบแรกในอาร์เรย์ว่าง ให้ตรวจสอบอินพุตหรือกำหนดผลลัพธ์เฉพาะสำหรับกรณีไม่มีค่าสูงสุด
มีจำนวนเต็มบวกกี่ตัวใน int array {-8, -3, -11}?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
มีเพียง -8 ที่เหลือเศษเป็นศูนย์เมื่อหารด้วย 2; ค่าลบก็สามารถเป็นจำนวนคู่ได้เช่นกัน
นับจำนวนคู่ในลูปผ่านอาร์เรย์ a:
int count = 0;for (int i = 0; i < a.length; i++) { if (a[i] % 2 == 0) count++; }- ลูปจะเข้าถึงแต่ละองค์ประกอบ; ตัวแปร
ifจะนับเฉพาะตัวที่เป็นคู่เท่านั้น
ขยายเหตุผลไปยังกรณีใหม่
- Array ว่างไม่มีองค์ประกอบแรกและต้องการ contract หรือการตรวจสอบแยกต่างหาก
- ค่าเริ่มต้นต้องเหมาะสมกับ operation: sum เป็นศูนย์, product เป็นหนึ่ง, maximum เป็นผู้เข้าแข่งขันเริ่มต้นที่มีvalid
รูปแบบลูปทั่วไป ผสมผสานการวนซ้ำและการเลือก: ตัวสะสม (sum += x, นับ, หรือ ค่าสูงสุด แบบต่อเนื่อง) ที่สร้างข้ามรอบ, พร้อมกับ if ภายในเพื่อประมวลผลเฉพาะรายการที่ตรงตามเงื่อนไข เริ่มต้น ตัวสะสมให้ถูกต้อง (ผลรวม 0, ผลคูณ 1, ค่าสูงสุดคือค่าแรก), และพิจารณาการออกก่อน (break/ตัวบ่งชี้) เมื่อพบคำตอบแล้ว