Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. Play with Chips: เล่นชิปย้ายตำแหน่งใน C++

    ปัญหา มีชิปอยู่ที่ตำแหน่ง chips[i] สามารถย้ายได้ 2 แบบ: ย้าย ±2 หน่วย: Cost = 0 ย้าย ±1 หน่วย: Cost = 1 หา Cost ต่ำสุด ให้ชิปทุกตัวอยู่ตำแหน่งเดียวกัน ตัวอย่าง: [2,2,2,3,3] → ย้าย 3,3 ไป 2 (Cost 1+1=2) → 2 ข้อสังเกตสำคัญ ย้าย ±2 ฟรี → Parity (Odd/Even) ไม่เปลี่ยน ด้วย Cost 0 ย้าย ±1 เปลี่ยน Parit

  2. Shift 2D Grid: เลื่อนกริด 2 มิติใน C++

    ปัญหา กริด m × n เลื่อน (Shift) k ครั้ง กฎการเลื่อน: grid[i][j] → grid[i][j+1] grid[i][n-1] → grid[i+1][0] grid[m-1][n-1] → grid[0][0] กล่าวคือ Flatten เป็น 1D Array แล้ว Rotate Right k ครั้ง ตัวอย่าง: [[1,2,3],[4,5,6],[7,8,9]], k=1 → [[9,1,2],[3,4,5],[6,7,8]] แนวคิด: Flatten + Rotate + Reshape

  3. แปลง Binary Number ใน Linked List เป็น Integer ใน C++

    โจทย์ปัญหา ได้รับ Singly Linked List ที่แต่ละโหนดมีค่า 0 หรือ 1 แทน Binary Number (MSB First) ให้คืนค่า Decimal Value ตัวอย่าง Input: 1 → 0 → 1 → 1 → 0 → 1 Binary: 101101 Output: 45 (32+8+4+1) แนวคิดการแก้ปัญหา วิธีที่ 1: Two Pass (Array + Reverse) เดิน List เก็บค่าลง Vector Reverse Vecto

  4. 2-3 Trees (Search และ Insert) ใน C/C++

    ภาพรวม 2-3 Tree เป็น Balanced Search Tree ที่ทุก Internal Node มี: 2-Node: 1 Key, 2 Children 3-Node: 2 Keys, 3 Children คุณสมบัติสำคัญ: ใบไม้ทุกระดับอยู่ระดับเดียวกัน (Perfectly Balanced) โครงสร้าง Node 2-Node: 3-Node: [a] [a | b] / \ / | \ L

  5. ปัญหา 2-Satisfiability (2-SAT) ใน C/C++

    ภาพรวม 2-SAT (2-Satisfiability) เป็นกรณีพิเศษของ SAT Problem ที่แต่ละ Clause มีตัวแปร 2 ตัว: (x₁ ∨ y₁) ∧ (x₂ ∨ y₂) ∧ ... ∧ (xₙ ∨ yₙ) แตกต่างจาก General SAT (NP-Complete) 2-SAT แก้ได้ใน Polynomial Time (O(n+m)) การลดรูปเป็น Graph Problem แปลงแต่ละ Clause (x ∨ y) เป็น 2 Implications: ¬x → y

  6. 3-Way Merge Sort ใน C++

    ภาพรวม 3-Way Merge Sort เป็นรูปแบบของ Merge Sort ที่แบ่ง Array เป็น 3 ส่วน แทนที่จะเป็น 2 ส่วน (Standard Merge Sort) อัลกอริทึม Divide: แบ่ง Array เป็น 3 ส่วนประมาณเท่ากัน (n/3) Conquer: เรียงแต่ละส่วน Recursively Merge: รวม 3 Sorted Arrays ให้เป็น 1 Sorted Array Merge 3 Sorted Array

  7. Else และ Switch Statements พร้อม Initializers ใน C++17

    ภาพรวม C++17 เพิ่มฟีเจอร์ Init-Statements ให้กับ if, else, และ switch ช่วยจำกัด Scope ของตัวแปรและทำโค้ดสะอาดขึ้น If-Else with Initializer Syntax if (init-statement; condition) { // ... } else { // ... } ตัวอย่าง: ก่อน C++17 vs หลัง C++17 0) { /* ... */ } else { /* ... */ } // val ตัวนี้ค

  8. คัดลอก Set Bits ในช่วงที่กำหนด (Copy Set Bits in Range) ใน C++

    โจทย์ปัญหา ได้รับจำนวนเต็มสองจำนวน x และ y และช่วงบิต [l, r] (1-indexed) ให้ คัดลอกบิตที่เป็น 1 จาก y ไป x เฉพาะในช่วงที่กำหนด คืนค่า x ที่แก้ไขแล้ว ตัวอย่าง Input: x = 10 (1010), y = 13 (1101), l = 2, r = 3 Binary: x = 1010 y = 1101 Range [2,3]: bits 2-3 of y = 10 (binary) Copy to x: 1010 | 0100

  9. Convex Hull ด้วย Graham Scan Algorithm ใน C++

    ภาพรวม Graham Scan เป็นอัลกอริทึม Convex Hull แบบคลาสสิก O(n log n) ขั้นตอน: หาจุด Bottom-most (Lowest Y, แล้ว Leftmost X) → p0 เรียงจุดอื่นๆ ตาม Polar Angle เทียบกับ p0 (ใช้ Cross Product) ลบจุด Collinear ที่อยู่ระหว่างทาง (เก็บจุดไกลสุด) ใช้ Stack สร้าง Hull: Push 3 จุดแรก, แล้วสำ

  10. Convex Hull ด้วย Monotone Chain Algorithm (Andrew's Algorithm) ใน C++

    ภาพรวม Monotone Chain Algorithm (Andrews Algorithm) หา Convex Hull ใน O(n log n) โดย: เรียงจุดตาม X (แล้ว Y) สร้าง Lower Hull (ซ้าย→ขวา) สร้าง Upper Hull (ขวา→ซ้าย) รวมกัน (ตัดจุดซ้ำ頭/ท้าย) หลักการ Cross Product สำหรับ 3 จุด O, A, B: 0: Counter-clockwise (Left Turn) < 0: Clockwis

  11. Convex Hull ด้วย Divide and Conquer Algorithm ใน C++

    ภาพรวม Divide and Conquer Convex Hull แบ่งจุดเป็นสองครึ่ง หา Hull ของแต่ละครึ่ง แล้ว Merge สอง Hull เข้าด้วยกัน อัลกอริทึม Divide: แบ่งจุดเป็นซ้าย/ขวา (เรียงตาม X ก่อน) Conquer: หา Hull ของแต่ละครึ่งแบบ Recursive (Base Case: ≤ 5 จุด ใช้ Brute Force) Merge: หา Upper Tangent และ Lower Ta

  12. หาพิกัดสี่เหลี่ยมผืนผ้าที่ครอบจุดทั้งหมด (Axis-Aligned) ใน C++

    โจทย์ปัญหา ได้รับชุดพิกัดจุด (X[i], Y[i]) ให้หา สี่เหลี่ยมผืนผ้าขนาดเล็กที่สุด ที่ครอบจุดทั้งหมด โดยมีด้านขนานแกนพิกัด (Axis-Aligned) ตัวอย่าง Input: X = {4, 3, 6, 1, -1, 12}, Y = {4, 1, 10, 3, 7, -1} Output: 4 มุมของสี่เหลี่ยม: {-1, -1} // Bottom-Left (Xmin, Ymin) {-1, 10} // Top-Left (Xmi

  13. แปลงวินาทีเป็นวัน ชั่วโมง นาที วินาทีใน C++

    โจทย์ปัญหา แปลงจำนวนวินาทีเป็นรูปแบบ วัน ชั่วโมง นาที วินาที ตัวอย่าง Input: 126700 วินาที Output: 1 days 11 hours 11 minutes 40 seconds วิธีคำนวณ days = seconds / (24 * 3600) seconds %= (24 * 3600) hours = seconds / 3600 seconds %= 3600 minutes = seconds / 60 seconds %= 6

  14. Convex Hull ด้วย Jarvis's Algorithm (Gift Wrapping) ใน C++

    ภาพรวม Convex Hull คือ Polygon คล محدบที่เล็กที่สุดที่ครอบจุดทั้งหมด (บนขอบหรือในภายใน) Jarviss Algorithm (Gift Wrapping) เริ่มจากจุดซ้ายสุด แล้ว ห่อของขวัญ โดยเลือกจุดที่ทำมุม South-most (Clockwise) ซ้ำจนกลับจุดเริ่มต้น อัลกอริทึม หาจุดซ้ายสุด (Leftmost Point) → เริ่มต้น จากจุดปัจจุบัน p

  15. แปลงเลขโรมันเป็นเลขฐานสิบ (1-3999) ใน C++

    โจทย์ปัญหา แปลง Roman Numeral String (1-3999) เป็น Integer กฎการอ่านเลขโรมัน สัญลักษณ์: I=1, V=5, X=10, L=50, C=100, D=500, M=1000 ปกติ: บวกค่าทั้งหมด (VI = 5+1=6) Subtractive Notation: ตัวเล็กหน้าตัวใหญ่ = ลบ (IV = 5-1=4, IX = 10-1=9, XL = 50-10=40, XC = 100-10=90, CD = 500-100=400, C

  16. แปลง String หนึ่งเป็นอีก String ด้วย Append และ Delete Last ใน C++

    โจทย์ปัญหา ได้รับ String สองตัว str1, str2 และจำนวน Operations k ตัดสินใจได้ไหมว่าแปลง str1 → str2 ด้วย Operation ทั้งหมด ก็อตเทอรี่ k ครั้ง โดย Operation มี 2 แบบ: Append - เพิ่มตัวอักษรท้าย String Delete Last - ลบตัวอักษรท้าย String ตัวอย่าง Input: str1 = tutorials, str2 = point, k = 5

  17. แปลง Array ให้เป็น Strictly Increasing ด้วยการเปลี่ยนค่าน้อยที่สุดใน C++

    โจทย์ปัญหา ได้รับ Array ให้เปลี่ยนค่าองค์ประกอบให้ Array กลายเป็น Strictly Increasing (แต่ละค่ามากกว่าค่าก่อนหน้าอย่างเคร่งครัด) โดยใช้ จำนวนการเปลี่ยนค่าน้อยที่สุด ตัวอย่าง นำเข้า: arr = {1, 2, 6, 5, 4} ผลลัพธ์: 2 คำอธิบาย: เปลี่ยน 5→7, 4→8 ได้ {1, 2, 6, 7, 8} (เปลี่ยน 2 ตัว) แนวคิดการแก้ปัญหา (L

  18. แปลงตัวเลขให้ประกอบด้วยเลข 3 และ 8 เท่านั้นใน C++

    โจทย์ปัญหา ได้รับตัวเลข ให้หา จำนวนการดำเนินการน้อยที่สุด เพื่อทำให้ทุกหลักเป็น 3 หรือ 8 เท่านั้น โดยการดำเนินการแต่ละครั้งเลือกได้ 1 ใน 2 แบบ: บวกหรือลบ 1 จากตัวเลข เปลี่ยนหลักใดหลักหนึ่งเป็น 3 หรือ 8 ตัวอย่าง นำเข้า: 2341974 ผลลัพธ์: 6 operations แนวคิดการแก้ปัญหา สังเกตว่า: การเปลี่ยน

  19. แปลงเลขฐานสิบเป็นเลขโรมัน (1-3999) ใน C++

    โจทย์ปัญหา แปลงจำนวนเต็มระหว่าง 1 ถึง 3999 เป็น Roman Numerals (เลขโรมัน) กฎเลขโรมัน ValueSymbol 1I 4IV 5V 9IX 10X 40XL 50L 90XC 100C 400CD 500D 900CM 1000M หลักการ: ใช้สัญลักษณ์ที่ใหญ่ที่สุดที่ ≤ เหลืออยู่ ทำซ้ำจนหมด (Greedy Approach) ตัวอ

  20. จัดเรียง String ให้สระและพยัญชนะสลับกันใน C++

    โจทย์ปัญหา ได้รับ String ให้จัดเรียงใหม่โดยให้ สระ (Vowels) และพยัญชนะ (Consonants) สลับกัน รักษาลำดับสัมพัทธ์ภายในแต่ละกลุ่ม หากทำไม่ได้ให้แสดง no such string ถ้ามีหลายวิธี ให้เลือก Lexicographically Smaller ตัวอย่าง InputOutputคำอธิบาย TutorialTutorilaT-u-t-o-r-i-l-a (สระ: u,o,i,a | พยัญ

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:128/301  20-คอมพิวเตอร์/Page Goto:1 122 123 124 125 126 127 128 129 130 131 132 133 134