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

    กำหนด Midpoint 3 จุดของด้านสามเหลี่ยม หาพิกัดยอดสามเหลี่ยมเดิม ตัวอย่าง: Midpoints (5,3), (4,4), (5,5) → Vertices (4,2), (4,6), (6,4) หลักการทางคณิตศาสตร์ ให้ยอดเป็น (x1,y1), (x2,y2), (x3,y3) Midpoints: (x1+x2)/2, (x2+x3)/2, (x3+x1)/2 ผลรวม Midpoint X = (x1+x2 + x2+x3 + x3+x1)/2 = x1+x2+x3 → x1 =

  2. หาความสูงของ Special Binary Tree ที่ Leaf เชื่อมเป็น Circular DLL ใน C++

    Special Binary Tree: Leaf Nodes เชื่อมต่อกันเป็น Circular Doubly Linked List (Left = Prev, Right = Next) หาความสูง (Height) ของต้นไม้ การตรวจสอบ Leaf Node ในต้นไม้ทั่วไป Leaf = Left==NULL && Right==NULL แต่ที่นี่ Leaf มี Pointer ชี้ Leaf อื่น → ตรวจสอบว่า: left == node ตัวอย่างโค้ด left = L3;

  3. หาตัวอักษร Index i ของ Binary String หลัง n รอบการแปลง (0→01, 1→10) ใน C++

    Binary String เริ่มต้น ทำ n รอบ: 0→01, 1→10 หาตัวอักษร Index i หลังรอบที่ n ตัวอย่าง: 101, n=2, i=3 Round 1: 1→10, 0→01, 1→10 = 100110 Round 2: 100101101001 → Index 3 = 1 อัลกอริทึม (Simulation) จำลองการแปลง n รอบ แล้วคืนค่า Index i ตัวอย่างโค้ด #include <iostream> using namespace std; c

  4. ตรวจสอบว่าโมเลกุลสามารถสร้างจาก 3 อะตอมด้วย Valence Number ใน C++

    Valence Number = จำนวนพันธะที่อะตอมต้องสร้าง กำหนด Valence ของ 3 อะตอม (a, b, c) ตรวจสอบว่าสร้างโมเลกุลได้หรือไม่ (พันธะหลายพันธะระหว่างคู่อะตอมได้) ตัวอย่าง: 2, 4, 2 → YES (พันธะ: 1-2, 1-2, 2-3, 2-3) เงื่อนไขที่สร้างไม่ได้ a + b + c เป็นเลขคี่ → ทุกพันธะลด Valence รวมลง 2 (Even) ดังนั้น Sum ต้อง

  5. หาตัวอักษรที่ k ของสตริงที่ถอดรหัส (Decoded) ใน C++

    สตริงเข้ารหัส: Substring ตามด้วยตัวเลขบอกจำนวนครั้ง เช่น ab2cd2 → ababcdcd หาตัวอักษรลำดับ k ตัวอย่าง: ab4c12ed3, k=21 → e อัลกอริทึม อ่าน Substring (ตัวอักษร) และ Count (ตัวเลข) สลับกัน ขยาย Substring ตาม Count เพิ่มใน Decrypted String คืนค่าตัวอักษร Index k-1 (0-based) ตัวอย่างโค้ด #include &

  6. หาค่าสูงสุดใน Stack แบบ O(1) โดยไม่ใช้ Stack เพิ่มเติมใน C++

    ออกแบบ Stack ที่รองรับ getMax() ใน O(1) โดยไม่ใช้พื้นที่เพิ่มเติม (O(1) Extra Space) เทคนิค: Encode ค่าสูงสุดใน Stack เอง เก็บค่า Modified Value แทนค่าจริง เมื่อ Push ค่าใหม่ที่มากกว่า Max ปัจจุบัน: Push: 2*x - max (Encoded Value) Update: max = x max): คืนค่า Max เดิม Restore Max: max = 2*max -

  7. หาจำนวนธนบัตรน้อยที่สุดสำหรับจำนวนเงินที่กำหนดใน C++ (Greedy)

    หาจำนวนธนบัตรน้อยที่สุดรวมเป็นจำนวนเงินที่กำหนด ใช้ธนบัตร: {2000, 500, 200, 100, 50, 20, 10, 5, 2, 1} (สมมติมีไม่จำกัด) ตัวอย่าง: 1072 → 500×2, 50×1, 20×1, 2×1 = 5 ใบ อัลกอริทึม Greedy เริ่มจากธนบัตรมากที่สุด ใช้มากที่สุดเท่าที่จะเป็นไปได้ แล้วค่อยลงมาลงมา ทำงานได้ถูกต้องเพราะชุดธนบัตรเป็น Canonic

  8. หาอาชีพในครอบครัวพิเศษ (Doctor/Engineer) ใน C++

    ครอบครัวพิเศษ: ทุกคนมีลูก 2 คน Engineer: ลูกคนที่ 1 = Engineer, ลูกคนที่ 2 = Doctor Doctor: ลูกคนที่ 1 = Doctor, ลูกคนที่ 2 = Engineer รุ่นแรก (Root) เป็น Engineer เสมอ หาอาชีพที่ Level L, Position P (1-indexed) ข้อสังเกต อาชีพขึ้นอยู่กับ: อาชีพของพาเรนต์ + ตำแหน่ง (Odd/Even) ตำแหน่งคี่ (Odd) →

  9. หา Relative Complement (Set Difference) ของอาร์เรย์เรียงลำดับสองอันใน C++

    Relative Complement ของ A และ B = องค์ประกอบที่อยู่ใน A แต่ไม่อยู่ใน B (A - B) ตัวอย่าง: A = [3, 6, 10, 12, 15], B = [1, 3, 5, 10, 16] → ผลลัพธ์ = [6, 12, 15] ใช้ STL set_difference ต้องการอาร์เรย์เรียงลำดับก่อน (หรือเรียงในโค้ด) ตัวอย่างโค้ด #include <iostream> #include <algorithm> #

  10. หาผลรวมโหนดทั้งหมดของ Perfect Binary Tree ใน C++

    Perfect Binary Tree ระดับ L ใบไม้ (Leaves) หมายเลข 1 ถึง n (n = 2^(L-1)) โหนดพาเรนต์ = ผลรวมลูก หาผลรวมโหนดทั้งหมด ข้อสังเกตสำคัญ ผลรวมใบไม้ = 1 + 2 + ... + n = n(n+1)/2 ใน Perfect Binary Tree ผลรวมแต่ละระดับเท่ากัน (เพราะแต่ละโหนด = ผลรวมลูก 2 ตัว) มีทั้งหมด L ระดับ → ผลรวมทั้งหมด = L × n(n+1)/

  11. หาพื้นที่วงกลมใหญ่สุดที่เขียนล้อมในรูปไข่ (Ellipse) ใน C++

    รูปไข่มีแกนใหญ่ 2a และแกนเล็ก 2b วงกลมที่เขียนล้อมได้ใหญ่สุดจะมีรัศมีเท่ากับแกนเล็ก b พื้นที่ = π × b² ตัวอย่างโค้ด #include <iostream> #include <cmath> using namespace std; double inscribedCircleArea(double b) { const double PI = 3.14159265359; return PI * b * b; } int mai

  12. หาจำนวนเลขคู่ติดต่อกันสูงสุดในอาร์เรย์ C++

    หาความยาว Subarray ติดต่อกันที่ยาวที่สุดซึ่งทุกตัวเป็นเลขคู่ ตัวอย่าง: [1, 2, 3, 4, 6, 8, 7] → [4, 6, 8] ความยาว 3 อัลกอริทึม ใช้ตัวนับ 2 ตัว: current (ความยาวปัจจุบัน) และ max_len (ความยาวสูงสุด) เจอเลขคู่ → current++, อัปเดต max_len เจอเลขคี่ → current = 0 ตัวอย่างโค้ด #include <iostream&g

  13. คำนวณรังสีสุทธิของสถานีหลังกระจายรังสีซ้ำใน C++

    มีสถานี N แห่งเรียงเป็นเส้นตรง แต่ละแห่งมีกำลังรังสี R เดิม กระจายรังสีให้เพื่อนบ้าน: ระยะ 1 เพิ่ม R-1, ระยะ 2 เพิ่ม R-2, ... จนกว่าจะเหลือ 0 หรือติดลบ ตัวอย่าง: Arr = [1, 2, 3] → ผลลัพธ์ [3, 4, 4] Index 0: 1 + (2-1) + (3-2) = 3 Index 1: 2 + (1-1) + (3-1) = 4 Index 2: 3 + (2-1) = 4 อัลกอริทึม สำ

  14. หาจุดเริ่มต้นทัวร์วงกลมครบทุกปั๊มน้ำมันใน C++

    มีปั๊มน้ำมัน n แห่งจัดเรียงเป็นวงกลม แต่ละแห่งมีน้ำมันและระยะทางไปปั๊มถัดไป หาจุดเริ่มต้นที่รถบรรทุกสามารถวิ่งครบวงได้ (1 ลิตร = 1 หน่วยระยะทาง) ตัวอย่าง: [(4,6), (6,5), (7,3), (4,5)] → เริ่มที่ Index 1 (ปั๊มที่ 2) อัลกอริทึม (Queue-based / Two Pointers) ใช้แนวคิด Sliding Window / Queue จำลองการเด

  15. หาค่าสูงสุดในอาร์เรย์ที่เพิ่มแล้วลด (Bitonic Array) ใน C++

    Bitonic Array คืออาร์เรย์ที่เพิ่มขึ้นมาก่อน แล้วค่อยลดลง หาค่าสูงสุด (Peak) ได้ใน O(log n) ด้วย Binary Search แบบปรับ ตัวอย่าง: [8, 10, 20, 80, 100, 250, 450, 100, 3, 2, 1] → Peak = 450 เงื่อนไข Binary Search arr[mid+1] → Peak อยู่ที่ mid arr[mid+1] แต่มากกว่า arr[mid-1] → Peak อยู่ด้านซ้าย ถ้า

  16. หา Mean Vector ของเมทริกซ์ใน C++

    Mean Vector คือเวกเตอร์ที่แต่ละองค์ประกอบเป็นค่าเฉลี่ยของคอลัมน์ในเมทริกซ์ ตัวอย่าง เมทริกซ์ 3×3: 1 2 3 4 5 6 7 8 9 Mean Vector = [4, 5, 6] เพราะ (1+4+7)/3=4, (2+5+8)/3=5, (3+6+9)/3=6 ตัวอย่างโค้ด #include <iostream> #define M 3 #define N 3 using namespace std; void calculateMeanVector(in

  17. หาค่าที่ต้องบวกเพื่อทำให้อาร์เรย์สมดุล (Balanced) ใน C++

    ให้อาร์เรย์ขนาดคู่ (n เป็นเลขคู่) แบ่งเป็น 2 ครึ่ง หาค่าที่ต้องบวกเข้าไป (ที่ครึ่งใดครึ่งหนึ่ง) เพื่อให้ผลรวมทั้งสองครึ่งเท่ากัน ตัวอย่าง: A = [1, 2, 3, 2, 5, 3] → ครึ่งซ้าย = 1+2+3 = 6, ครึ่งขวา = 2+5+3 = 10 → ต้องบวก 4 อัลกอริทึม คำนวณผลรวมครึ่งซ้าย (0 ถึง n/2 - 1) คำนวณผลรวมครึ่งขวา (n/2 ถึง n

  18. หาโหนดที่ค่าสัมบูรณ์ของ (Weight - X) น้อยที่สุดใน Tree (C++)

    ให้ Tree ที่มีน้ำหนัก (Weight) ที่แต่ละโหนด และค่า X หาโหนดที่ทำให้ |Weight[i] - X| น้อยที่สุด X = 15, โหนดที่ 3 (Weight = 11) ให้ |11-15| = 4 น้อยที่สุด อัลกอริทึม ใช้ DFS (Depth First Search) เดินทั่ว Tree เก็บค่าความต่างสัมบูรณ์ที่น้อยที่สุด และโหนดที่สอดคล้อง ตัวอย่างโค้ด #include <iostre

  19. หาค่าน้อยที่สุดใน Binary Search Tree (BST) ใน C++

    ใน BST โหนดด้านซ้ายมีค่าน้อยกว่าโหนดปัจจุบันเสมอ ดังนั้นค่าน้อยที่สุดอยู่ที่โหนดซ้ายสุด อัลกอริทึม เริ่มจาก Root วนลูปไปทางซ้ายจนกว่า Left จะเป็น NULL คืนค่าของโหนดนั้น ตัวอย่างโค้ด right = NULL; if (*root == NULL) { *root = newNode; return; } if (key val; } int

  20. หาผลคูณสูงสุดของ Quadruple (4 ตัว) ในอาร์เรย์ C++

    หาผลคูณสูงสุดของ 4 ตัวเลข (Quadruple) ในอาร์เรย์ ตัวอย่าง: [3, 5, 20, 6, 10] → ผลคูณสูงสุด = 6000 (จาก 10, 5, 6, 20) อัลกอริทึม เรียงอาร์เรย์จากน้อยไปมาก พิจารณา 3 กรณี: ผลคูณ 4 ตัวท้าย (มากที่สุด) ผลคูณ 4 ตัวหน้า (น้อยที่สุด - อาจเป็นลบ × ลบ = บวก) ผลคูณ 2 ตัวหน้า × 2 ตัวท้าย (ลบ × ลบ × บวก × บ

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:98/301  20-คอมพิวเตอร์/Page Goto:1 92 93 94 95 96 97 98 99 100 101 102 103 104