Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. ลบโหนดใน Binary Tree ใน C++

    บทนำ การลบโหนดใน Binary Tree (ไม่ใช่ BST) ไม่มีกฎเรียงลำดับ วิธีมาตรฐาน: แทนที่โหนดที่จะลบด้วยโหนดลึกที่สุด (Deepest Node) แล้วลบโหนดลึกที่สุดนั้น ขั้นตอนการแก้ปัญหา BFS (Level Order) หาโหนดที่จะลบ (key_node) และโหนดลึกที่สุด (deepest_node) คัดลอกค่าของ deepest_node ไปยัง key_node ลบ deepest_node

  2. ลบคู่ "01" หรือ "10" ในสตริงฐานสองจนไม่เหลือคู่ใน C++

    บทนำ โจทย์: กำหนดสตริงฐานสอง ลบคู่ 01 หรือ 10 ซ้ำๆ จนไม่มีคู่เหล่านี้เหลือ หาจำนวนคู่ที่ลบได้ ข้อสังเกตสำคัญ การลบ 01 หรือ 10 ทั้งคู่ก็คือการลบ 0 หนึ่งตัวและ 1 หนึ่งตัว จำนวนคู่ที่ลบได้สูงสุด = min(จำนวน 0, จำนวน 1) ขั้นตอนการแก้ปัญหา นับจำนวน 0 และ 1 ในสตริง คืนค่า min(count0, count1) ตัวอย่าง

  3. หาความหนาแน่นของ Binary Tree ในการเดินทางครั้งเดียวใน C++

    บทนำ ความหนาแน่นของ Binary Tree (Tree Density) = ขนาดต้นไม้ (จำนวนโหนด) / ความสูงของต้นไม้ ขั้นตอนการแก้ปัญหา สร้าง Binary Tree เขียนฟังก์ชัน Recursive หาความสูงและนับจำนวนโหนดพร้อมกัน (Single Traversal) คืนค่าความสูง และอัปเดตตัวนับโหนดผ่าน reference parameter คำนวณ Density = size / height ตัวอ

  4. Demlo Number (กำลังสองของ 11...1) ใน C++

    บทนำ Demlo Number คือกำลังสองของเลขที่ประกอบด้วย 1 ทั้งหมด เช่น 1²=1, 11²=121, 111²=12321, 1111²=1234321 รูปแบบ 111...1 (n ตัว) ^ 2 = 1 2 3 ... n-1 n n-1 ... 3 2 1 ขั้นตอนการแก้ปัญหา รับสตริงของ 1 ซ้ำๆ ความยาวสตริง = n สร้างสตริงผลลัพธ์: 1 ถึง n แล้ว n-1 ถึง 1 ตัวอย่างโค้ด #include <bits/std

  5. หาความลึกของ N-ary Tree ใน C++

    บทนำ N-ary Tree คือต้นไม้ที่แต่ละโหนดมีลูกได้สูงสุด N ตัว (Binary Tree คือกรณี N=2) ใช้ vector เก็บลูกของแต่ละโหนด ขั้นตอนการแก้ปัญหา กำหนดโครงสร้างโหนด มี vector<Node*> child สร้างต้นไม้ตัวอย่าง เขียนฟังก์ชัน Recursive หาความลึก ความลึกของโหนด = 1 + max(ความลึกของลูกทุกตัว) โหนดว่าง (NULL)

  6. หาความลึกของโหนดระดับคี่ลึกที่สุดใน Binary Tree ใน C++

    บทนำ โจทย์: หาความลึก (ระดับ) ของโหนดใบ (Leaf Node) ที่อยู่ในระดับคี่ (Odd Level) และลึกที่สุดใน Binary Tree ขั้นตอนการแก้ปัญหา สร้าง Binary Tree ด้วยข้อมูลตัวอย่าง เขียนฟังก์ชัน Recursive รับพารามิเตอร์ root และ level ปัจจุบัน ถ้าเป็นโหนดใบ (left=null, right=null) และ level เป็นคี่ → คืนค่า level

  7. Deserium Number (เลขดีเซอเรียม) ใน C++

    บทนำ Deserium Number (หรือที่รู้จักกันดีกว่าในชื่อ Disarium Number) คือเลขที่ผลรวมของแต่ละหลัก ยกกำลังด้วยลำดับหลัก (นับจากซ้าย) เท่ากับตัวเลขเดิม ตัวอย่าง 135: 1¹ + 3² + 5³ = 1 + 9 + 125 = 135 → เป็น Deserium 89: 8¹ + 9² = 8 + 81 = 89 → เป็น Deserium ขั้นตอนการแก้ปัญหา นับจำนวนหลักของตัวเลข วนลู

  8. หา Determinant ของเมทริกซ์ใน C++

    บทนำ Determinant (อาจารยธรรม) ของเมทริกซ์สี่เหลี่ยมจัตุรัส คำนวณได้โดยการขยายโคแฟกเตอร์ (Cofactor Expansion) แบบ Recursive ขั้นตอนการแก้ปัญหา ถ้าเมทริกซ์ 1×1 → คืนค่าเดี่ยว ถ้าเมทริกซ์ 2×2 → ad - bc เมทริกซ์ใหญ่กว่า: ขยายตามแถวแรก สร้าง Submatrix โดยตัดแถวและคอลัมน์ขององค์ประกอบปัจจุบัน Determinan

  9. หาตำแหน่งบุคคลที่สามบน N-เหลี่ยมสมมาตรใน C++

    บทนำ โจทย์: บน N-เหลี่ยมสมมาตร มีคนอยู่ 2 คน ที่มุม A และ B หามุมที่ 3 ที่ทำให้ผลรวมระยะทางไปยัง A และ B น้อยที่สุด ขั้นตอนการแก้ปัญหา วนลูปทุกมุม i = 1 ถึง N (ข้าม A และ B) คำนวณ |i - A| + |i - B| (ระยะทางแบบ Manhattan บนมุม) เลือกมุมที่ให้ผลรวมน้อยที่สุด ตัวอย่างโค้ด #include <bits/stdc++.h

  10. หาเส้นทแยงมุมของเจ็ดเหลี่ยมสมมาตรใน C++

    บทนำ เส้นทแยงมุมของเจ็ดเหลี่ยมสมมาตร (Regular Heptagon) มีความยาว ≈ 1.802 × ด้าน (s) สูตร d = 1.802 × s (ค่าประมาณจาก 2 × sin(3π/7) ≈ 1.80194) ตัวอย่างโค้ด #include <bits/stdc++.h> using namespace std; float heptagonDiagonal(float s) { if (s < 0) { return -1; } return

  11. หาเส้นทแยงมุมของหกเหลี่ยมสมมาตรใน C++

    บทนำ เส้นทแยงมุมของหกเหลี่ยมสมมาตร (Regular Hexagon) มีความยาว = 1.73 × ด้าน (s) สูตร d = 1.73 × s (ค่าประมาณจาก √3 ≈ 1.732, ทฤษฎีจริงคือ d = 2 × s × sin(60°) = √3 × s) ตัวอย่างโค้ด #include <bits/stdc++.h> using namespace std; float hexagonDiagonal(float s) { if (s < 0) { re

  12. หาเส้นทแยงมุมของห้าเหลี่ยมสมมาตรใน C++

    บทนำ เส้นทแยงมุมของห้าเหลี่ยมสมมาตร (Regular Pentagon) มีความยาว = 1.22 × ด้าน (s) สูตร d = 1.22 × s (ค่าประมาณจาก φ = (1+√5)/2 ≈ 1.618, ทฤษฎีจริงคือ d = φ × s) ตัวอย่างโค้ด #include <bits/stdc++.h> using namespace std; float pentagonDiagonal(float s) { if (s < 0) { return -1

  13. Diagonally Dominant Matrix (เมทริกซ์ครอบคลุมแนวทแยง) ใน C++

    บทนำ เมทริกซ์ครอบคลุมแนวทแยง (Diagonally Dominant Matrix) คือเมทริกซ์สี่เหลี่ยมจัตุรัสที่ในแต่ละแถว ค่าสัมบูรณ์ขององค์ประกอบแนวทแยง มีค่ามากกว่าหรือเท่ากับผลรวมค่าสัมบูรณ์ขององค์ประกอบอื่นๆ ในแถวเดียวกัน เงื่อนไข สำหรับทุกแถว i: |A[i][i]| ≥ Σ|A[i][j]| สำหรับ j ≠ i ตัวอย่าง 4 2 1 3 5 2 2 4 7

  14. หาคะแนนสอบที่เป็นไปได้ทั้งหมดกับการให้คะแนนลบใน C++

    บทนำ โจทย์: มี n ข้อ ข้อถูก +x คะแนน ข้อผิด -y คะแนน ข้อไม่ตอบ 0 คะแนน หาจำนวนคะแนนรวมที่เป็นไปได้ทั้งหมด ขั้นตอนการแก้ปัญหา วนลูป i = 0 ถึง n (จำนวนข้อถูก) วนลูป j = 0 ถึง n (จำนวนข้อไม่ตอบ) ข้อผิด = n - i - j คะแนน = x*i - y*(n - i - j) เก็บคะแนนใน set (กันซ้ำ) คืนขนาด set ตัวอย่างโค้ด #includ

  15. นับ substring ที่ขึ้นต้นและลงท้ายด้วยสตริงกำหนดใน C++

    บทนำ โจทย์: กำหนดสตริงหลัก และสตริงเริ่มต้น (start) พร้อมสตริงสิ้นสุด (end) นับจำนวน substring ที่ ต่างกัน (distinct) ที่ขึ้นต้นด้วย start และลงท้ายด้วย end ตัวอย่าง str = getmesomecoffee start = m end = e ผลลัพธ์: 6 Substrings: me, mesome, mesomemecoffe, mesomemecoffee, mecoffe, mecoffee ขั้นตอนก

  16. Digital Root (รากดิจิตอล) ของจำนวนเต็มใหญ่ใน C++

    บทนำ Digital Root คือผลรวมหลักของตัวเลข ทำซ้ำจนเหลือหลักเดียว (1-9) เช่น 12345 → 1+2+3+4+5=15 → 1+5=6 สูตรทางคณิตศาสตร์ Digital Root ของ n = 0 ถ้า n = 0 9 ถ้า n mod 9 = 0 (และ n ≠ 0) n mod 9 ถ้า n mod 9 ≠ 0 ขั้นตอนการแก้ปัญหา รับตัวเลขเป็นสตริง (รองรับเลขใหญ่มาก) คำนวณผลรวมหลักทั้งหมด ใช้สูตร mo

  17. รวมอาร์เรย์สองชุดแล้วแยกหลักเก็บในอาร์เรย์ใหม่ใน C++

    บทนำ โจทย์: บวกอาร์เรย์สองชุดตามตำแหน่ง (index) เดียวกัน หากผลบวกมีหลักมากกว่า 1 ให้แยกหลักแต่ละหลักเก็บในอาร์เรย์ผลลัพธ์ ตัวอย่าง arr_one = {1, 2, 32, 4, 5} arr_two = {1, 52, 3} ผลลัพธ์: 2 5 4 3 5 4 5 คำนวณ: index 0: 1+1=2 → [2] index 1: 2+52=54 → [5,4] index 2: 32+3=35 → [3,5] index 3: 4 (เหลือ a

  18. แจกลูกบอลไม่ให้ซ้ำสีใน C++

    บทนำ โจทย์: มี n ลูกบอลสีต่างๆ แจกให้นักเรียน k คน โดยแต่ละคนต้องไม่ได้รับลูกบอลสีซ้ำกัน (คือ สีใดสีหนึ่ง ต่อคนได้สูงสุด 1 ลูก) เงื่อนไขการแจกได้ สำหรับทุกสี จำนวนลูกบอลสีนั้นต้อง ≤ k (จำนวนนักเรียน) มิฉะนั้นจะมีคนได้สีซ้ำแน่นอน ขั้นตอนการแก้ปัญหา นับจำนวนลูกบอลแต่ละสี (ใช้ map) ตรวจสอบทุกสี: ถ้า

  19. แบ่งตัวเลขใหญ่เป็นสองส่วนที่ต่างกัน k ใน C++

    บทนำ โจทย์: หา a, b ที่ทำให้ a + b = n และ a - b = k (โดย a ≥ b) วิธีแก้ทางคณิตศาสตร์ ระบบสมการ: a + b = n a - b = k บวกกัน: 2a = n + k → a = (n + k) / 2 แล้ว b = n - a ตัวอย่างโค้ด #include <bits/stdc++.h> using namespace std; void divideTheNumber(int n, int k) { double a = (n + k) / 2

  20. แบ่งตัวเลขเป็นสองส่วนใน C++

    บทนำ โจทย์ง่ายๆ: แบ่งจำนวนเต็ม n เป็นสองจำนวน a และ b โดยที่ a = n/2 (ปัดลง) และ b = n - a สูตรคณิตศาสตร์ a = n / 2 b = n - a ตัวอย่างโค้ด #include <bits/stdc++.h> using namespace std; void divideTheNumber(int n) { int a = n / 2; int b = n - a; cout << a << " &q

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:250/301  20-คอมพิวเตอร์/Page Goto:1 244 245 246 247 248 249 250 251 252 253 254 255 256