Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. สร้าง Special Binary Tree จาก Inorder Traversal ใน C++

    โจทย์: ให้ Inorder traversal ของต้นไม้ ต้องการสร้าง Special Binary Tree โดยที่โหนดแม่มีค่ามากกว่าลูกซ้ายและลูกขวาเสมอ (Max-Heap property บน Inorder sequence) แนวคิด เลือกค่าสูงสุดในช่วง array เป็นราก แล้วสร้างซ้ายและขวาแบบเวียนเกิด (Recursive) จากส่วนซ้ายและขวาของค่าสูงสุด ฟังก์ชันสำคัญ // หาดัชนี

  2. นับจำนวน Binary Search Trees (BST) ใน Binary Tree ด้วย C++

    โจทย์: ให้ Binary Tree ต้องการนับจำนวน Subtree ที่เป็น Binary Search Tree (BST) โดย BST หมายถึง ต้นไม้ที่โหนดซ้าย < โหนดแม่ < โหนดขวา แนวคิด: Bottom-up Traversal เดินต้นไม้จากใบขึ้นมาสู่ราก สำหรับแต่ละโหนด ตรวจสอบว่า Subtree ที่รากที่โหนดนั้นเป็น BST หรือไม่ โดยใช้ข้อมูลจากลูกซ้ายและลูกขวา โ

  3. ลบองค์ประกอบออกจากอาร์เรย์: เปรียบเทียบ 2 รอบ (Two Traversals) และ 1 รอบ (One Traversal) ใน C++

    วิธีที่ 1: Two Traversals (สองรอบ) รอบที่ 1: ค้นหาตำแหน่งขององค์ประกอบที่ต้องการลบ รอบที่ 2: เลื่อนองค์ประกอบทางขวามาย้ายซ้าย #include <iostream> using namespace std; int main() { int arr[] = {11, 15, 6, 8, 9, 10}; int length = sizeof(arr)/sizeof(arr[0]); int ele = 6; int i;

  4. ลบองค์ประกอบของอาร์เรย์ในช่วงดัชนี [L – R] ด้วย C++

    โจทย์: ลบองค์ประกอบของอาร์เรย์ในช่วงดัชนี L ถึง R (รวม L แต่ไม่รวม R หรือตามเงื่อนไขโค้ด) แนวคิด: การเลื่อนองค์ประกอบ (Shift Elements) ใช้ตัวแปร k เป็นดัชนีปลายทาง สำหรับแต่ละดัชนี i หากไม่อยู่ในช่วงที่จะลบ ให้คัดลอก arr[i] ไปที่ arr[k] และเพิ่ม k ตัวอย่างโค้ด C++ #include <iostream> using n

  5. ลบโหนดใบ (Leaf Node) ที่มีค่าเท่ากับ x ใน Binary Tree ด้วย C++

    โจทย์นี้เหมือนกับบทความก่อนหน้า (ID 1004078620) แตกต่างเพียงชื่อตัวแปรจาก k เป็น x และโครงสร้างต้นไม้ตัวอย่าง โค้ด C++ (เหมือนกันแต่เปลี่ยนชื่อตัวแปร) #include <iostream> using namespace std; struct Node { int data; struct Node *leftChild, *rightChild; }; struct Node* newNode(int da

  6. ลบโหนดใบ (Leaf Node) ที่มีค่าเท่ากับ k ใน Binary Tree ด้วย C++

    โจทย์: ลบโหนดใบ (โหนดที่ไม่มีลูก) ที่มีค่าเท่ากับ k ออกจาก Binary Tree แนวคิดการแก้ปัญหา (Post-order Traversal) ใช้การเดินแบบ Post-order (ลูกซ้าย → ลูกขวา → ราก) เพื่อให้แน่ใจว่าโหนดลูกถูกประมวลผลก่อนโหนดแม่ เมื่อพบโหนดใบที่มีค่า k ให้คืนค่า nullptr ให้โหนดแม่ โครงสร้างโหนด struct Node { int d

  7. ลบโหนดกลาง (Middle Node) ของ Linked List ใน C++

    โจทย์: ลบโหนดที่อยู่ตรงกลางของ Singly Linked List หากจำนวนโหนดเป็นคู่ ให้ลบโหนดกลางขวา (index n/2) แนวคิด นับจำนวนโหนดทั้งหมด หาตำแหน่งกลาง: mid = count / 2 เดินไปยังโหนดก่อนกลาง (mid-1) ข้ามโหนดกลางโดยเชื่อม prev->next = mid->next ลบโหนดกลาง ตัวอย่างโค้ด C++ #include <iostream> usin

  8. ลบโหนด N ตัวหลังจากโหนด M ใน Linked List ด้วย C++

    โจทย์: ให้ Linked List ต้องการเก็บโหนด M ตัวแรก แล้วลบโหนด N ตัวถัดไป ทำซ้ำจนจบลิสต์ โครงสร้างโหนด struct Node { int data; struct Node* next; }; ฟังก์ชันหลัก: deleteNnodesAfterM void deleteNnodesAfterM(Node *head, int M, int N) { Node *current = head, *t; int nodeCount; wh

  9. การลบต้นไม้ไบนารี (Binary Tree) ด้วยคีย์เวิร์ด delete ใน C++

    ใน C++ เราสามารถลบต้นไม้ไบนารีทั้งหมดได้อย่างมีประสิทธิภาพโดยใช้ Destructor ร่วมกับคีย์เวิร์ด delete บนโหนดราก (root node) ซึ่งจะเรียก destructor แบบเวียนเกิด (recursive) ไปยังโหนดลูกทั้งหมด โครงสร้างโหนด (Node Structure) class btree_node { public: int data; btree_node* leftChild; btree

  10. การลบซับสตริง "01" หรือ "10" ในสตริงไบนารี เพื่อให้ไม่มีรูปแบบเหล่านี้ใน C++

    โจทย์: ให้สตริงไบนารี ต้องการหาจำนวนครั้งขั้นต่ำที่ต้องลบซับสตริง 01 หรือ 10 จนสตริงไม่มีรูปแบบเหล่านี้เหลืออยู่ ข้อสังเกตสำคัญ การลบ 01 หรือ 10 ทีละคู่นั้นเทียบเท่ากับการจับคู่ 0 กับ 1 แล้วเอาออก จำนวนครั้งสูงสุดที่ทำได้เท่ากับจำนวนของตัวเลขที่น้อยกว่าระหว่าง 0 และ 1 ตัวอย่างโค้ด C++ #include <

  11. เลขเดมโล (Demlo Number) - กำลังสองของตัวเลข 11...1 ใน C++

    เลขเดมโล (Demlo numbers) คือเลขพาลินโดรมที่ได้จากการยกกำลังสองของตัวเลขที่ประกอบด้วยเลข 1 ซ้ำกัน (เช่น 11, 111, 1111) โดยที่ตัวเลขต้องมีความยาวไม่เกิน 10 หลัก แนวคิดการแก้ปัญหา รูปแบบของเลขเดมโลจะเป็นดังนี้: 11² = 121 111² = 12321 1111² = 1234321 สามารถสร้างได้โดยการนับขึ้นจาก 1 ถึงจำนวนหลักของตั

  12. การคำนวณเส้นทแยงมุมของรูปเขปทากอน (Regular Heptagon) ด้วย C++

    เพื่อหาความยาวของเส้นทแยงมุมของรูปเขปทากอนสมมาตร เราสามารถใช้สูตร 2 * ด้าน * sin(900/14) โดยที่ค่า sin(900/14) มีค่าประมาณ 0.9 ตัวอย่างโค้ด C++ โปรแกรมตัวอย่างต่อไปนี้แสดงวิธีคำนวณเส้นทแยงมุมจากความยาวด้านของรูปเขปทากอน: #include <iostream> using namespace std; int main() { float side =

  13. การลบโหนดในต้นไม้แบบทวิภาค (Deletion in Binary Tree) ใน C++

    แนวคิด การลบโหนดใน Binary Tree (ไม่ใช่ BST) ทำโดยการแทนที่โหนดที่จะลบด้วย โหนดล่างสุดและขวาสุด (Deepest Rightmost Node) แล้วลบโหนดล่างสุดนั้นออก ขั้นตอน Level Order Traversal (BFS) หาโหนดที่จะลบ (data_node) และโหนดล่างสุด (temp) คัดลอกค่าของ temp ไป data_node ลบ temp (ต้องหา parent ของ temp เพื่อ

  14. ความหนาแน่นของต้นไม้แบบทวิภาค (Binary Tree Density) ในหนึ่งครั้งการท่องใน C++

    นิยาม Density = Size / Height โดย Size = จำนวนโหนด, Height = ความสูงของต้นไม้ อัลกอริธึม One Traversal คำนวณ Size และ Height พร้อมกันในการท่องครั้งเดียว: ฟังก์ชัน heightAndSize(node, &size) ส่งคืนความสูง และเพิ่ม size ทีละ 1 Density = (float)size / height โปรแกรมตัวอย่าง right = new Node(11);

  15. ความลึกของต้นไม้ N-ary (N-Ary Tree Depth) ใน C++

    ปัญหา หาความลึก (Height/Depth) ของต้นไม้ N-ary (โหนดแต่ละตัวมีลูกได้หลายตัว) โครงสร้างโหนด struct Node { char data; vector<Node*> children; Node(char val) : data(val) {} }; อัลกอริธึม Recursive ถ้า root เป็น NULL → depth = 0 วนลูปทุก child หา max depth ของ child แล้ว +1 โปรแก

  16. ความลึกของโหนดระดับคี่ลึกสุดในต้นไม้แบบทวิภาคใน C++

    ปัญหา หาความลึก (Depth) ของโหนดใบ (Leaf Node) ที่อยู่ในระดับคี่ (Odd Level) และลึกที่สุด อัลกอริธึม Recursive DFS พร้อมส่ง parameter ระดับปัจจุบัน: ถ้าโหนดเป็น NULL → ส่งคืน 0 เพิ่มระดับปัจจุบัน ถ้าเป็นโหนดใบ และระดับเป็นคี่ → ส่งคืนระดับปัจจุบัน Recursive ซ้ายและขวา ส่งคืน max ของทั้งสอง โปรแก

  17. เลข Disarium (Disarium Number) ใน C++

    Disarium Number คืออะไร? จำนวนที่ ผลรวมของแต่ละหลัก ยกกำลังด้วยตำแหน่งของมัน เท่ากับตัวเลขเอง ตัวอย่าง: 518 = 5¹ + 1² + 8³ = 5 + 1 + 512 = 518 → เป็น Disarium อัลกอริธึม นับจำนวนหลักของ n แยกหลักจากขวาไปซ้าย ยกกำลังด้วยตำแหน่ง (นับจากซ้าย) รวมค่าแล้วเปรียบเทียบกับ n โปรแกรมตัวอย่าง 0) {

  18. อernéตของเมทริกซ์ (Determinant of Matrix) ใน C++

    นิยาม Determinant คำนวณได้เฉพาะเมทริกซ์จัตุรัส โดยขยายโคแฟกเตอร์ (Cofactor Expansion) ตามแถวแรก สำหรับเมทริกซ์ 3×3: | a b c | | d e f | = a(ei-fh) - b(di-gf) + c(dh-eg) | g h i | อัลกอริธึม Recursive Base case: 1×1 → ค่าตัวเดียว สร้าง Cofactor Matrix โดยลบแถว 0 และคอลัมน์ j Det = Σ (-1)^j × mat[0

  19. จำนวนช่องสี่เหลี่ยมหน่วยที่เส้นตรงผ่าน ใน C++

    ปัญหา หาจำนวนช่องสี่เหลี่ยมหน่วย (Unit Squares) ที่เส้นตรงระหว่าง (x1,y1) และ (x2,y2) ผ่าน สูตร dx = |x2 - x1| dy = |y2 - y1| Answer = dx + dy - gcd(dx, dy) โปรแกรมตัวอย่าง #include <iostream> #include <algorithm> #include <cmath> using namespace std; int unitSquares(int x1, in

  20. หาตำแหน่งบุคคลที่ 3 บนรูปหลายเหลี่ยมปกติ N ด้านใน C++

    ปัญหา บนรูปหลายเหลี่ยม N ด้าน มีเด็ก 2 คนยืนที่จุด A และ B หาจุดที่บุคคลที่ 3 ควรยืน เพื่อให้ผลรวมระยะทาง (จำนวนขั้น) ไป A และ B น้อยที่สุด ถ้ามีหลายคำตอบ เลือกเลขจุดน้อยที่สุด อัลกอริธึม วนลูปทุกจุด i (1 ถึง N) ยกเว้น A และ B คำนวณ |i-A| + |i-B| เลือก i ที่ให้ผลรวมน้อยที่สุด โปรแกรมตัวอย่าง #inc

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:243/301  20-คอมพิวเตอร์/Page Goto:1 237 238 239 240 241 242 243 244 245 246 247 248 249