Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. ตรวจสอบว่า Circle อยู่ภายใน Ring ที่เกิดจาก Concentric Circles สองวงใน C++

    เรามีสองวงกลมที่มีจุดศูนย์กลางตรงกันที่จุดกำเนิด (Origin) รัศมีของทั้งสองวงกลมคือ r และ R โดยที่ R > r อีกวงกลมหนึ่งมีรัศมี r1 และจุดศูนย์กลางที่กำหนด เราต้องตรวจสอบว่าวงกลมนั้นอยู่ภายใน Ring (แหวน) ที่เกิดจากสองวงกลมแรกหรือไม่ เราสามารถแก้ปัญหานี้ได้โดยใช้ทฤษฎีบทพีทาโกรัส คำนวณระยะห่างจากจุดศูน

  2. ตรวจสอบว่า String เป็น Sum-String หรือไม่ใน C++

    ในบทความนี้เราจะมาดูวิธีการตรวจสอบว่า String ที่กำหนดเป็น Sum-String หรือไม่ String ถือว่าเป็น Sum-String หาก substring สุดท้ายทางขวาสามารถเขียนในรูปของผลรวมของ substring สองตัวก่อนหน้าได้ และเงื่อนไขเดียวกันนี้ยังคงเป็นจริงอย่างต่อเนื่องสำหรับ substring ก่อนหน้า ตัวอย่างเช่น String 12243660 เป็น Su

  3. ตรวจสอบว่า Tree Graph เป็นแบบเส้นตรงหรือไม่ใน C++

    ในบทความนี้เราจะมาดูวิธีการตรวจสอบว่า Tree Graph ที่กำหนดเป็นแบบเส้นตรง (Linear) หรือไม่ Tree Graph แบบเส้นตรงคือโครงสร้างที่สามารถแสดงผลในบรรทัดเดียวได้ ตัวอย่างเช่นภาพด้านล่างนี้เป็น Linear Tree Graph แต่ภาพนี้ไม่ใช่ Linear Tree Graph ในการตรวจสอบว่า Graph เป็นแบบเส้นตรงหรือไม่ เราสามารถใช้เงื่อ

  4. ตรวจสอบ Strongly Connected Graph ด้วย Kosaraju Algorithm (DFS) ใน C++

    Directed Graph เป็น Strongly Connected ก็ต่อเมื่อทุกคู่โหนด (u,v) มี Path u→v และ v→u Kosaraju Algorithm (2-pass DFS) DFS จากโหนด 0 บน Graph เดิม → ต้อง Visit ทุกโหนด Reverse ทุก Edge (Transpose Graph) DFS จากโหนด 0 บน Graph ที่ Reverse → ต้อง Visit ทุกโหนด ทั้งคู่สำเร็จ → Strongly Connected ตัว

  5. ตรวจสอบเส้นตรงสัมผัส/ตัด/อยู่นอกวงกลมใน C++

    กำหนดวงกลมศูนย์กลาง (h,k) รัศมี r และเส้นตรง ax + by + c = 0 ตรวจสอบความสัมพันธ์ หลักการ ระยะห่างจากศูนย์กลางถึงเส้นตรง (Perpendicular Distance): d = |ah + bk + c| / √(a² + b²) r → เส้นอยู่นอกวงกลม (Outside) d = r → เส้นสัมผัสวงกลม (Tangent/Touching) d < r → เส้นตัดวงกลม (Intersecting/Secant)

  6. ตรวจสอบว่า Matrix Invertible (มี Matrix ยกกลับ) ใน C++

    Matrix M Invertible (มี M⁻¹) ก็ต่อเมื่อ Determinant ≠ 0 M⁻¹ = adj(M) / det(M) การคำนวณ Determinant (Recursive) Base case: 1×1 → det = element หา Cofactor Matrix (ตัดแถว p, คอลัมน์ q) det = Σ (-1)^(i+j) × a[0][j] × det(Cofactor) ตัวอย่างโค้ด #include <iostream> #define N 4 using namespace s

  7. ตรวจสอบว่าเลือกตัวเลขจากแต่ละแถวได้ XOR > 0 ใน C++

    0 0 → YES ข้อสังเกตสำคัญ ถ้า XOR ของคอลัมน์แรกทั้งหมด ≠ 0 → YES (เลือกคอลัมน์แรกทุกแถว) ถ้า XOR = 0 → ตรวจสอบว่ามีแถวไหนที่มีค่าต่างกัน ≥ 2 ค่า หรือไม่ มี → สลับเลือกค่าอื่นในแถวนั้น จะทำให้ XOR ≠ 0 → YES ไม่มี (ทุกแถวค่าทุกคอลัมน์เหมือนกัน) → NO ตัวอย่างโค้ด #include <iostream> using

  8. ตรวจสอบสตริงไบนารีครบทุกการจัดเรียงความยาว k ใน C++

    ปัญหา ให้สตริงไบนารี (ประกอบ 0, 1) และจำนวนเต็ม k ตรวจสอบว่าสตริงนี้มี substring ครบทุกการจัดเรียง (permutation) ของ k บิตไบนารีหรือไม่ จำนวน permutation ทั้งหมด = 2^k ตัวอย่าง: str = 11001, k = 2 Permutations ของ 2 บิต: 00, 01, 10, 11 Substrings ความยาว 2 ใน 11001: 11, 10, 00, 01 → ครบทุกตัว ✓ อัล

  9. ตรวจสอบ Binary Tree (ไม่ใช่ BST) มีค่าซ้ำใน C++

    ปัญหา ให้ Binary Tree ธรรมดา (ไม่ใช่ BST) ตรวจสอบว่ามีค่าโหนดซ้ำกันหรือไม่ วิธีแก้: Hashing (Hash Set) ท่อง Tree (Preorder, Inorder, Postorder, หรือ Level-order ก็ได้) สำหรับแต่ละโหนด: ถ้าค่าอยู่ใน Hash Set แล้ว → มีค่าซ้ำ return true เพิ่มค่าลง Hash Set จบการท่อง → ไม่มีค่าซ้ำ ตั

  10. ตรวจสอบ Binary Tree มี Subtree ซ้ำขนาด 2 ขึ้นไปใน C++

    ปัญหา ตรวจสอบว่า Binary Tree มี Subtree ซ้ำกันขนาด ≥ 2 โหนดหรือไม่ ตัวอย่าง: Tree ที่มี Subtree โครงสร้างเหมือนกัน 2 ที่ (มีโหนด D, E ซ้ำ) วิธีแก้: Tree Serialization + Hashing Serialize subtree เริ่มจากโหนดใดโหนดหนึ่งเป็นสตริง (เช่น Preorder พร้อม marker สำหรับ NULL) เก็บสตริงที่ serialize ได้ใน

  11. ตรวจสอบ Binary Tree เรียงลำดับตาม Level ใน C++

    Level-wise Sorted Binary Tree Binary Tree ที่ในแต่ละ Level (ความลึก) โหนดเรียงจากซ้ายไปขวา และค่าใน Level ต่อไปมากกว่าค่าสูงสุดของ Level ก่อนหน้า เงื่อนไข ในแต่ละ Level: ค่าจากซ้ายไปขวา ต้องไม่ลดลง (non-decreasing) ค่ามากที่สุดของ Level ก่อนหน้า อัลกอริทึม: Level Order Traversal (BFS) ใช้ Queu

  12. ตรวจสอบเซลล์ในสตริงว่าถูกเยี่ยมชมซ้ำได้หรือไม่ใน C++

    ปัญหา ให้สตริงที่ประกอบด้วย . (เซลล์ว่าง) และตัวเลข (0-9) ตัวเลข x หมายถึงสามารถเคลื่อนที่ซ้ายหรือขวา x ก้าวได้ ตรวจสอบว่ามีเซลล์ไหนถูกเยี่ยมชมได้มากกว่า 1 วิธีหรือไม่ ตัวอย่าง: .2...2.. (index: 0 1 2 3 4 5 6 7) Index 1 (ค่า 2): ไปได้ index 3 (ขวา 2) หรือ index -1 (ซ้าย 2, invalid) Index 5 (ค่า 2):

  13. ตรวจสอบอาร์เรย์ว่าเป็น Preorder Traversal ของ BST ได้หรือไม่ใน C++

    ปัญหา ให้ลำดับตัวเลข ตรวจสอบว่าลำดับนี้เป็น Preorder Traversal ของ Binary Search Tree (BST) ใดๆ ได้หรือไม่ Preorder: Root → Left → Right BST property: Left subtree < Root < Right subtree ตัวอย่าง Preorder: [40, 30, 35, 80, 100] BST ที่สอดคล้อง: 40 / \ 30 80 \ \ 35

  14. ตรวจสอบเมทริกซ์ Hankel ใน C++

    Hankel Matrix คืออะไร? เมทริกซ์สี่เหลี่ยมจัตุรัสที่สมาชิกบน skew-diagonal (แนวทแยงมุมจากซ้ายล่างไปขวาบน) ทุกเส้นมีค่าเท่ากัน เงื่อนไข: M[i][j] = M[i+1][j-1] สำหรับทุก i, j ที่ถูกต้อง หรืออีกนัย: M[i][j] ขึ้นอยู่กับ i+j เท่านั้น (ค่าคงที่ตาม i+j) ตัวอย่าง Hankel Matrix 5×5 12345 23456 34567 45678 5

  15. ตรวจสอบเบอร์โทรศัพท์ fancy ใน C++

    Fancy Phone Number คืออะไร? เบอร์โทร 10 หลัก ที่ตรงตามเงื่อนไขอย่างน้อย 1 ข้อจาก 3 ข้อ: 3 ตัวเลขติดกันเหมือนกัน เช่น 555, 7777 3 ตัวเลขติดกันเรียงลำดับ เพิ่มหรือลด เช่น 123, 456, 321, 987 ตัวเลขใดตัวเลขหนึ่งปรากฏ 4 ครั้งขึ้นไป ในเบอร์ทั้งหมด เช่น 8965499259 (มี 9 อยู่ 4 ครั้ง) ตัวอย่าง 9859009976

  16. ตรวจสอบตัวเลขแสดงเป็น d หลักในฐานใดฐานหนึ่งได้ใน C++

    ปัญหา ให้ตัวเลข n และจำนวนหลัก d ตรวจสอบว่า n สามารถเขียนเป็น d หลักในฐาน (base) ใดฐานหนึ่งระหว่าง 2 ถึง 32 ได้หรือไม่ ตัวอย่าง: n = 8, d = 4 → ในฐาน 2: 8 = 1000₂ (4 หลัก) → ใช่ หลักการ ตัวเลข n ในฐาน b มี d หลัก ⟺ b^(d-1) ≤ n < b^d หรืออีกนัย: วนลองฐาน 2 ถึง 32 แปลง n เป็นฐาน b นับจำนวนหลัก อัลกอ

  17. ตรวจสอบตัวเลขหารผลรวมแฟกทอเรียลของหลักตัวเองลงตัวใน C++

    ปัญหา ให้ตัวเลข n ตรวจสอบว่า n หาร (ผลรวมของแฟกทอเรียลของแต่ละหลัก) ลงตัวหรือไม่ ตัวอย่าง: n = 19 หลัก: 1, 9 1! + 9! = 1 + 362880 = 362881 362881 ÷ 19 = 19099 → ลงตัว ✓ อัลกอริทึม แยกหลักของ n คำนวณแฟกทอเรียลแต่ละหลัก (0! = 1, 1! = 1, 2! = 2, ..., 9! = 362880) รวมแฟกทอเรียลทั้งหมด ตรวจสอบ sum % n

  18. ตรวจสอบจำนวน Pronic ใน C++

    จำนวน Pronic (Pronic Number) คืออะไร? จำนวนที่สามารถจัดเป็นรูปสี่เหลี่ยมผืนผ้าได้ (Pronic มาจาก希腊文 promekes = rectangular) คือผลคูณของจำนวนเต็มติดกัน 2 ตัว: n = k × (k + 1) ลำดับ Pronic Numbers 0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342, ... สอดคล้องกับ: 0×1, 1

  19. ตรวจสอบตัวเลขใหญ่แบ่งเซกเมนต์ได้ผลรวมเท่ากันใน C++

    ปัญหา ให้ตัวเลขขนาดใหญ่ (string) ตรวจสอบว่าแบ่งเป็น 2 เซกเมนต์ขึ้นไป ได้ โดยแต่ละเซกเมนต์มีผลรวมหลักเท่ากัน ตัวอย่าง: 74325 → เซกเมนต์ (7), (4,3), (2,5) → ผลรวมแต่ละคู่ = 7 ✓ อัลกอริทึม: Prefix Sum + Greedy คำนวณ Prefix Sum ของหลักต่างๆ ลองทำให้เซกเมนต์แรกสิ้นสุดที่ตำแหน่ง i (i = 0 ถึง n-2) target

  20. ตรวจสอบตัวเลขใหญ่หาร 13 ลงตัวใน C++

    ปัญหา ตรวจสอบตัวเลขขนาดใหญ่ (เกิน range ของ long long) ว่าหาร 13 ลงตัวหรือไม่ โดยรับ input เป็น string กฎการหาร 13 มี 2 วิธีหลัก: วิธีที่ 1: Alternating Sum of 3-digit Blocks แบ่งตัวเลขเป็นกลุ่มละ 3 หลักจากขวาไปซ้าย แล้วบวก-ลบสลับกัน ตัวอย่าง: 2911285 → กลุ่ม: 2 | 911 | 285 Alternating sum: 2 - 91

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:84/301  20-คอมพิวเตอร์/Page Goto:1 78 79 80 81 82 83 84 85 86 87 88 89 90