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

    บทนำ ในบทช่วยสอนนี้ เราจะพูดถึงโปรแกรมที่แปลงรายการเชื่อมโยงเดี่ยว (Singly Linked List) เป็นรายการเชื่อมโยงแบบวงกลม (Circular Linked List) เราจะได้รับรายการเชื่อมโยงเดี่ยวมา ภารกิจของเราคือการนำองค์ประกอบของรายการนั้นไปแปลงเป็นรายการเชื่อมโยงแบบวงกลม ตัวอย่างโค้ด #include <bits/stdc++.h> // โ

  2. แปลง Singly Linked List เป็น XOR Linked List ใน C++

    ภาพรวมปัญหา แปลง Singly Linked List เป็น XOR Linked List (เก็บ XOR ของ Address ก่อนหน้าและถัดไป) ตัวอย่างโค้ด C++ next = NULL; return temp; } void print(Node* head) { while (head) { cout data next; } cout next = XOR(prev, next); prev = curr; curr = next;

  3. แปลง String เป็น Binary Sequence ใน C++

    ภาพรวมปัญหา แปลงสตริงตัวอักษรเป็น Binary Sequence (ASCII → Binary) แยกด้วย Space ตัวอย่าง Input: tutorialspoint Output: 1110100 1110101 1110100 1101111 1110010 1101001 1100001 1101100 1110011 1110000 1101111 1101001 1101110 1110100 วิธีแก้ปัญหา แต่ละ Char → ASCII Value (int) แปลงเป็น Binary (หาร

  4. แปลง Ternary Expression เป็น Binary Tree ใน C++

    ภาพรวมปัญหา แปลง Ternary Expression (เช่น a?b?c:d:e) เป็น Binary Tree ตัวอย่าง Expression: a?b?c:d:e Tree Structure: a / \ b e / \ c d วิธีแก้ปัญหา (Recursive Parsing) อ่านตัวอักษรปัจจุบันสร้างโหนด ถ้าตัวถัดไปคือ ? → มี Subtree: ข้าม ? → Recursive สร้าง Left → ข้าม :

  5. ปรับอาร์เรย์ให้ GCD เท่ากับ 1 ใน C++

    ภาพรวมปัญหา ได้รับอาร์เรย์และ K ต้องทำให้ GCD ของอาร์เรย์ = 1 โดยหารสมาชิกด้วย K ซ้ำได้จน < K ตัวอย่าง Input: arr = {10, 15, 30}, k = 6 Output: Yes วิธีแก้ปัญหา หา GCD ของอาร์เรย์ทั้งหมด หาเฉพาะตัวประกอบมากที่สุดของ GCD ถ้าเฉพาะตัวประกอบมากที่สุด ≤ K → ทำได้ (Yes) ตัวอย่างโค้ด C++ #include <

  6. แปลง ASCII Values เป็น String ใน C++

    ภาพรวมปัญหา ได้รับสตริงที่เป็นรหัส ASCII ต่อกัน ต้องแปลงกลับเป็นข้อความ ตัวอย่าง Input: 104101108108111443211911111410810033 Output: hello, world! วิธีแก้ปัญหา อ่านตัวเลขทีละหลักสร้างค่า ถ้าค่าอยู่ในช่วง 32-122 (Printable ASCII) → แปลงเป็น Char พิมพ์ แล้ว Reset ค่า ตัวอย่างโค้ด C++ #include <

  7. แปลงสตริงเป็น Palindrome โดยเปลี่ยนได้แค่ 1 ตัวอักษรใน C++

    ภาพรวมปัญหา ตรวจสอบว่าสตริงสามารถกลายเป็น Palindrome ได้โดยเปลี่ยนตัวอักษรได้สูงสุด 1 ตัว ตัวอย่าง Input: abccaa Output: Yes วิธีแก้ปัญหา นับจำนวนคู่ตัวอักษรที่ไม่ตรงกัน (i และ n-i-1) ถ้า ≤ 1 → เป็นไปได้ ตัวอย่างโค้ด C++ #include <bits/stdc++.h> using namespace std; bool if_palindrome(stri

  8. แปลง Undirected Graph เป็น Directed Graph ไม่มี Path ยาวกว่า 1 ใน C++

    ภาพรวมปัญหา 1 วิธีแก้ปัญหา (Bipartite Check) ตรวจสอบว่า Graph เป็น Bipartite ได้หรือไม่ (2-Colorable) ถ้าเป็น → Direct Edge จาก Color 0 ไป Color 1 ถ้าไม่เป็น → พิมพ์ -1 ตัวอย่างโค้ด C++ #include <bits/stdc++.h> using namespace std; #define N 100005 vector<int> gr[N]; int colour[N];

  9. แปลงเวลา 24 ชั่วโมงเป็น 12 ชั่วโมงใน C++

    ภาพรวมปัญหา แปลงเวลาจากรูปแบบ 24 ชั่วโมง (HH:MM:SS) เป็น 12 ชั่วโมง พร้อม AM/PM ตัวอย่างโค้ด C++ #include <bits/stdc++.h> using namespace std; void convert_12hour(string str) { int h1 = (int)str[0] - 0; int h2 = (int)str[1] - 0; int hh = h1 * 10 + h2; string Meridien;

  10. พิมพ์คู่ Anagrams ในอาร์เรย์สตริงใน C++

    ภาพรวมปัญหา ได้รับอาร์เรย์สตริง ต้องพิมพ์คู่ Anagrams ทั้งหมด (สตริงที่จัดเรียงตัวอักษรแล้วเหมือนกัน) ตัวอย่าง Input: {hello, hrdef, from, lohel, morf} Output: [hello, lohel], [from, morf] วิธีแก้ปัญหา (Nested Loops + Character Count) ลูปซ้อน 2 ชั้น เลือกคู่สตริง นับความถี่ตัวอักษร 256 ตัว ถ้าเท่

  11. พิมพ์คู่ในอาร์เรย์ที่มีผลรวมเท่ากันใน C++

    ภาพรวมปัญหา ได้รับ Unsorted Array ต้องพิมพ์คู่ทั้งหมดที่มีผลรวมเท่ากัน ตัวอย่าง Input: [12, 13, 20, 5] Output: [12, 13] and [20, 5] have sum 25 วิธีแก้ปัญหา (Two Maps) Map1: Key = Pair, Value = Sum Map2: Key = Sum, Value = Vector of Pairs ลูปหาคู่ทั้งหมด เก็บใน Map2 พิมพ์ Sum ที่มีคู่มากกว่า 1 คู

  12. พิมพ์โหนดคี่ใน Binary Search Tree ใน C++

    ภาพรวมปัญหา ได้รับ Binary Search Tree ต้องพิมพ์โหนดที่มีค่าเป็นเลขคี่ทั้งหมด Binary Search Tree Properties ลูกซ้าย < โหนดแม่ โหนดแม่ Subtree ทั้งสองก็ต้องเป็น BST ตัวอย่าง Output: 1 3 9 วิธีแก้ปัญหา Inorder Traversal (ได้ค่าจากน้อยไปมาก) ตรวจสอบแต่ละโหนด mod 2 != 0 ตัวอย่างโค้ด C++ right = N

  13. พิมพ์ตัวเลขที่เฉพาะตัวประกอบเป็น Subset ของเฉพาะตัวประกอบของ X ใน C++

    ภาพรวมปัญหา ได้รับอาร์เรย์ N ตัวและตัวเลข X ต้องพิมพ์ตัวเลขในอาร์เรย์ที่เฉพาะตัวประกอบเป็น Subset ของเฉพาะตัวประกอบของ X ตัวอย่าง Input: X = 30, array = {2, 3, 6, 10, 12} Output: 2 3 6 วิธีแก้ปัญหา (GCD Division) แต่ละตัวเลขในอาร์เรย์ หารซ้ำด้วย GCD(ตัวเลข, X) จน GCD = 1 ถ้าผลลัพธ์ = 1 → เฉพาะตัว

  14. พิมพ์ตัวเลขน้อยกว่า N ที่มีหลักไม่เกิน 2 ตัวที่ไม่ซ้ำใน C++

    ภาพรวมปัญหา ได้รับ N ต้องพิมพ์ตัวเลข < N ที่ใช้หลักได้สูงสุด 2 ตัวที่ไม่ซ้ำกัน ตัวอย่าง Input: N = 17 Output: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 วิธีแก้ปัญหา (Recursion + Set) เลือกคู่ตัวเลข (i, j) โดย i < j Recursive สร้างตัวเลขด้วย i และ j: num*10+i, num*10+j เก็บใน Set กรองซ้ำและเรียง ตั

  15. พิมพ์โหนดที่ห่างจาก Leaf Node ระยะ K ใน C++

    ภาพรวมปัญหา ได้รับ Binary Tree และ K ต้องพิมพ์โหนดที่ห่างจาก Leaf Node ระยะ K (นับขึ้นไปยัง Ancestor) ตัวอย่าง K = 2 Output: 6 9 วิธีแก้ปัญหา (DFS + Path Tracking) DFS เก็บ Path (Ancestors) ในอาร์เรย์ ตอนเจอ Leaf → ดู Path[pathLen - K - 1] คือโหนดที่ห่าง K ใช้ Visited array ป้องกันพิมพ์ซ้ำ Time

  16. พิมพ์โหนดที่น้อยกว่า X ใน Min Heap ใน C++

    ภาพรวมปัญหา ได้รับ Min Heap และค่า X ต้องพิมพ์โหนดที่มีค่าน้อยกว่า X ทั้งหมด Min Heap คืออะไร? Binary Tree ที่โหนดแม่มีค่าน้อยกว่าลูกเสมอ ตัวอย่าง X = 45 Output: 2 4 7 10 17 22 33 34 วิธีแก้ปัญหา (Preorder Traversal + Pruning) Preorder Traversal ทั้ง Heap ถ้าโหนด ≥ X → หยุดไม่ไปลึกกว่า (เพราะลู

  17. พิมพ์โหนดที่มี Leaf Nodes จำนวน K ใน Binary Tree ใน C++

    ภาพรวมปัญหา ได้รับ Binary Tree และ K ต้องพิมพ์โหนดที่มี Leaf Nodes ใน Subtree จำนวน K ตัว ตัวอย่าง K = 2 Output: N T วิธีแก้ปัญหา (Postorder Traversal) Postorder Traversal คืนจำนวน Leaf ใน Subtree ถ้า leftLeaves + rightLeaves == K → พิมพ์โหนดปัจจุบัน Time Complexity: O(n) ตัวอย่างโค้ด C++ righ

  18. พิมพ์โหนดระหว่างสองระดับใน Binary Tree ใน C++

    ภาพรวมปัญหา ได้รับ Binary Tree และสองระดับ (upper, lower) ต้องพิมพ์โหนดระหว่างระดับเหล่านั้น ตัวอย่าง Upper = 1, Lower = 3 Output: 6 3 9 7 4 8 10 วิธีแก้ปัญหา (Level Order Traversal with Queue) ใช้ Queue ทำ Level Order Traversal ใช้ Marker แยกระดับ พิมพ์เฉพาะระดับที่อยู่ระหว่าง lower ถึง upper

  19. พิมพ์โหนดที่ห่างจากโหนดเป้าหมาย K ระยะใน C++

    ภาพรวมปัญหา ได้รับ Binary Tree, Target Node, และ K ต้องพิมพ์โหนดที่ห่างจาก Target Node ระยะ K ตัวอย่าง K = 2, Target: 9 Output: 5 1 3 วิธีแก้ปัญหา โหนดที่ห่าง K อาจอยู่ใน: Subtree ของ Target → DFS ลงไปหา depth K Subtree ของ Ancestor → หา Ancestor แล้วไปอีกฝั่ง ตัวอย่างโค้ด C++ #include <ios

  20. พิมพ์ตัวเลข N หลักที่เพิ่มขึ้นอย่างเคร่งครัดใน C++

    ภาพรวมปัญหา ได้รับ N ต้องพิมพ์ตัวเลข N หลักที่หลักเพิ่มขึ้นอย่างเคร่งครัดจากซ้ายไปขวา (MSB < LSB) ตัวอย่าง Input: n = 2 Output: 01 02 03 ... 89 วิธีแก้ปัญหา (Recursion) หลักก่อนหน้า (i+1 ถึง 9) ตัวอย่างโค้ด C++ #include <iostream> using namespace std; void printIncresingNumbers(int start,

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