Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. นับสตริงที่ประกอบด้วย R, G, B ตามเงื่อนไขจำนวนขั้นต่ำ ใน C++

    โจทย์: ต้องการสร้างสตริงความยาว size จากตัวอักษร R, G, B โดยต้องมี R อย่างน้อย r ตัว, G อย่างน้อย g ตัว, B อย่างน้อย b ตัว แนวคิด: Combinatorics ให้ remaining = size - (r + g + b) เป็นตัวอักษรที่เหลือจัดสรรได้อิสระ นับจำนวนวิธีแจก remaining ให้กับ 3 ตัวอักษร (stars and bars) แล้วคูณด้วยจำนวน permut

  2. นับจำนวนธนบัตรที่ต้องใช้จ่ายเงิน (Coin Change แบบกำหนดจำนวนธนบัตร) ใน C++

    โจทย์: ต้องจ่ายเงิน pay_Rupees โดยใช้ธนบัตร 2 ชนิดคือ Rupees_amount_1 และ Rupees_amount_2 จำนวนธนบัตรรวมต้องเท่ากับ distribution_total ต้องการหาจำนวนธนบัตรชนิดแรก สมการทางคณิตศาสตร์ ให้ a = จำนวนธนบัตรชนิด 1, b = จำนวนธนบัตรชนิด 2 a + b = distribution_total a×R₁ + b×R₂ = pay_Rupees แทน b = N - a:

  3. สร้าง Sum-Array จากผลรวมในช่วงกำหนด (Sliding Window) ใน C++

    โจทย์: ให้อาร์เรย์ arr[] และเลขคี่ sum ต้องการสร้าง sum-array arr2[] โดยที่ arr2[i] = ผลรวมของ arr[i-sum/2] ถึง arr[i+sum/2] (ปรับขอบเขตที่ขอบอาร์เรย์) แนวคิด: Sliding Window ใช้หน้าต่างขนาด sum เลื่อนไปเรื่อยๆ โดยลบองค์ประกอบซ้ายสุดและบวกองค์ประกอบขวาสุด อัลกอริทึม คำนวณผลรวมเริ่มต้นของหน้าต่างแ

  4. นับจำนวนต้นไม้ในป่า (Forest) ด้วย DFS ใน C++

    โจทย์: ให้กราฟแบบไม่มีทิศทาง (Forest = ชุดของต้นไม้) ต้องการนับจำนวน Connected Component (ต้นไม้) โดยใช้ DFS แนวคิด แต่ละ Connected Component คือต้นไม้หนึ่งต้น ทำ DFS จากโหนดที่ยังไม่ได้เยี่ยมชม แต่ละครั้งที่เริ่ม DFS ใหม่ = พบต้นไม้ใหม่ โค้ด C++ #include <bits/stdc++.h> using namespace std;

  5. นับตัวหารร่วมของสตริงสองตัว (Common String Divisors) ใน C++

    โจทย์: ให้สตริงสองตัว numo และ demo ต้องการหาจำนวนสตริงที่เป็น ตัวหาร ของทั้งสองสตริง นิยามตัวหารของสตริง สตริง s เป็นตัวหารของ t ก็ต่อเมื่อ t สามารถสร้างได้โดยการซ้ำ s หลายครั้ง เช่น: abc เป็นตัวหารของ abcabcabc เงื่อนไขที่จำเป็น ความยาว s ต้องหารความยาว t ลงตัว s ต้องเป็น prefix ของ t การซ้ำ s

  6. นับ Subset ที่ทุกองค์ประกอบและผลรวมหาร x ลงตัว ใน C++

    โจทย์: ให้อาร์เรย์ arr[] และจำนวน x ต้องการนับ Subset ที่: ทุกองค์ประกอบใน subset หาร x ลงตัว ผลรวมของ subset หาร x ลงตัว ข้อสังเกตสำคัญ เงื่อนไขที่ 1 หมายถึง subset ต้องประกอบด้วยองค์ประกอบที่หาร x ลงตัวเท่านั้น เงื่อนไขที่ 2 จะเป็นจริงอัตโนมัติ เพราะผลรวมของตัวเลขที่หาร x ลงตัว ก็จะหาร x ลงตัว

  7. นับสี่เหลี่ยมจัตุรัสที่มีด้านคี่ในกระดานหมากรุก (Chessboard) ด้วย C++

    โจทย์: ให้กระดานหมากรุกขนาด size × size ต้องการนับจำนวนสี่เหลี่ยมจัตุรัสย่อยที่มีความยาวด้านเป็นเลขคี่ สูตรคำนวณ สำหรับด้านคี่ i (1, 3, 5, ... ≤ size) จำนวนสี่เหลี่ยมขนาด i×i คือ (size - i + 1)² ผลรวม: Σ (size - i + 1)² สำหรับ i = 1, 3, 5... โค้ด C++ #include <bits/stdc++.h> using namespace

  8. นับ Subarray ที่ผลคูณหาร k ลงตัว ใน C++

    โจทย์: ให้อาร์เรย์ arr[] และจำนวนเต็ม k ต้องการนับจำนวน Subarray ที่ผลคูณขององค์ประกอบหาร k ลงตัว ตัวอย่าง arr = {2, 1, 5, 8}, k = 4 Subarray ที่ถูกต้อง: [8], [5,8], [1,5,8], [2,1,5,8] → 4 subarrays วิธีที่ 1: Naive Approach (O(n³)) ตรวจสอบทุก subarray คำนวณผลคูณตรวจสอบหาร k ลงตัว int product_k(in

  9. นับ Subtree ที่ผลรวมน้ำหนักเท่ากับ x ใน Binary Tree ด้วย C++

    โจทย์: ให้ Binary Tree และค่า x ต้องการนับจำนวน Subtree ที่ผลรวมน้ำหนักโหนดเท่ากับ x แนวคิด: Post-order Traversal คำนวณผลรวม คำนวณผลรวมของ Subtree ทุกตัวจากใบขึ้นมา หากผลรวมเท่ากับ x ให้นับ +1 ฟังก์ชันหลัก int subtrees_x(Tree_Node* root, int x) { static int count = 0; static Tree_Node* tem

  10. นับโหนดที่ผลรวมหลักของน้ำหนักเป็นเลขคี่ ใน C++

    โจทย์: ให้ Binary Tree ที่โหนดมีน้ำหนักเป็นจำนวนเต็ม ต้องการนับโหนดที่ผลรวมของหลักเลข (digit sum) เป็นเลขคี่ ฟังก์ชันคำนวณผลรวมหลัก int sum_total(int check) { int total = 0; while (check) { total += check % 10; check /= 10; } return total; } DFS นับโหนด vector<in

  11. นับโหนดที่น้ำหนักเป็นกำลังของ 2 (Power of Two) ใน C++

    โจทย์: ให้ Binary Tree ที่โหนดมีน้ำหนักเป็นจำนวนเต็ม ต้องการนับโหนดที่น้ำหนักเป็นกำลังของ 2 (1, 2, 4, 8, 16, 32, 64...) การตรวจสอบกำลังของ 2 ด้วย Bitwise จำนวน n เป็นกำลังของ 2 ก็ต่อเมื่อ n & (n - 1) == 0 และ 0 if (set && !(set & (set - 1))) // เป็นกำลังของ 2 DFS นับโหนด vector&l

  12. นับโหนดที่น้ำหนักเป็นจำนวนกำลังสองสมบูรณ์ (Perfect Square) ใน C++

    โจทย์: ให้ Binary Tree ที่โหนดมีน้ำหนักเป็นจำนวนเต็ม ต้องการนับโหนดที่น้ำหนักเป็นกำลังสองสมบูรณ์ (เช่น 1, 4, 9, 16, 25, 36...) การตรวจสอบกำลังสองสมบูรณ์ bool check(int check_it) { double total = sqrt(check_it); return (floor(total) == ceil(total)); } DFS นับโหนด vector<int> Node_Weig

  13. นับโหนดที่น้ำหนักเป็นสตริงมีพยัญชนะ (Vowel) ใน C++

    โจทย์: ให้ Binary Tree ที่โหนดมีน้ำหนักเป็นสตริง ต้องการนับโหนดที่สตริงมีพยัญชนะ (a,e,i,o,u) อย่างน้อย 1 ตัว แนวคิด: DFS + ตรวจสอบสตริง ใช้ DFS เดินต้นไม้ (แทนด้วย adjacency list) สำหรับแต่ละโหนด ตรวจสอบสตริงน้ำหนักว่ามีพยัญชนะหรือไม่ ฟังก์ชันตรวจสอบพยัญชนะ bool check(string check_it) { int le

  14. สร้าง Pushdown Automata สำหรับภาษา L = {0ⁿ⁺ᵐ1ᵐ2ⁿ | m,n ≥ 0} ใน C++

    ภาษาที่: จำนวน 0 = จำนวน 1 + จำนวน 2 State และ Transition q₀: รับ 0 แล้วจับคู่กับ 1 หรือ 2 (0, I/0I) → q₀: push 0 (0, 0/00) → q₀: push 0 (1, 0/ε) → q₁: pop 0 สำหรับ 1 (2, 0/ε) → q₂: pop 0 สำหรับ 2 ($, I/I) → qf: สตริงว่าง q₁: pop 0 สำหรับ 1 แล้วอาจเจอ 2 (1, 0/ε) → q₁: pop 0 สำหรับ 1 ($, I/I) →

  15. สร้าง Pushdown Automata สำหรับภาษา L = {0ᵐ1ⁿ⁺ᵐ2ⁿ | m,n ≥ 0} ใน C++

    ภาษาที่: จำนวน 1 = จำนวน 0 + จำนวน 2 State และ Transition q₀: รับ 0 และ 1 เริ่มต้น (0, I/0I) → q₀: push 0 (0, 0/00) → q₀: push 0 (1, I/1I) → q₁: push 1 (กรณี m=0) (1, 0/ε) → q₁: pop 0 สำหรับ 1 (จับคู่ 0 กับ 1) q₁: รับ 1 ต่อ และ 2 (1, 1/11) → q₁: push 1 (ส่วนเกินของ 1) (1, 0/ε) → q₁: pop 0 สำหร

  16. สร้าง Pushdown Automata สำหรับภาษา L = {0ⁿ1ᵐ2ᵐ3ⁿ | m,n ≥ 0} ใน C++

    บทความนี้อธิบายการสร้าง PDA สำหรับภาษาที่: จำนวน 0 = จำนวน 3 จำนวน 1 = จำนวน 2 m,n ≥ 0 (รวมสตริงว่าง) State และ Transition q₀: เริ่มต้น รับ 0 และ 1 (0, I/0I) → q₀: push 0 (0, 0/00) → q₀: push 0 (1, 0/10) → q₁: push 1 บน 0 0, n=0) (3, 0/ε) → q₃: pop 0 สำหรับ 3 ($, I/I) → q₄: สตริงว่าง q₁: รับ

  17. สร้าง Pushdown Automata สำหรับภาษา L = {a²ᵐc⁴ⁿdⁿbᵐ | m,n ≥ 0} ใน C++

    บทความนี้อธิบายการสร้าง Pushdown Automaton (PDA) สำหรับภาษาที่มีเงื่อนไข: จำนวน a = 2 × จำนวน b จำนวน c = 4 × จำนวน d m,n ≥ 0 (รวมสตริงว่าง) องค์ประกอบของ PDA Input tape Control unit (states) Stack ขนาดไม่จำกัด PDA เป็น 7-tuple: (Q, Σ, S, δ, q₀, I, F) การออกแบบ State และ Transition State q₀:

  18. นับโหนดที่น้ำหนักบวก X ได้เลขฟีโบนัชชี ใน C++

    โจทย์: ให้ Binary Tree ที่โหนดมีน้ำหนัก (weight) และค่า X ต้องการนับโหนดที่ weight + X เป็นเลขฟีโบนัชชี การตรวจสอบเลขฟีโบนัชชี เลข n เป็นฟีโบนัชชี ก็ต่อเมื่อ 5n² + 4 หรือ 5n² - 4 เป็นจำนวนกำลังสองสมบูรณ์ bool check_square(long double val) { long double val_1 = sqrt(val); return (val_1 - fl

  19. สร้าง Full k-ary Tree จาก Preorder Traversal ใน C++

    โจทย์: ให้ Preorder traversal ของ Full k-ary Tree (โหนดแต่ละตัวมีลูก 0 หรือ k ตัว) ต้องการสร้างต้นไม้กลับมาและพิมพ์ Postorder traversal โครงสร้างโหนด k-ary Tree struct Tree_Node { int address; vector<Tree_Node*> root; // vector ของลูก k ตัว }; การสร้างต้นไม้ ใช้ดัชนี count เดินผ่าน

  20. นับคู่โหนดใน Binary Tree ที่ผลรวมเท่ากับ x ใน C++

    โจทย์: ให้ Binary Tree และค่า x ต้องการนับจำนวนคู่โหนด (unordered pair) ที่ผลรวมของค่าเท่ากับ x แนวคิด: Brute Force ด้วยการตรวจสอบทุกคู่ สำหรับแต่ละโหนด ptr ตรวจสอบว่ามีโหนดอื่นในต้นไม้ที่มีค่าเท่ากับ x - ptr->data หรือไม่ ฟังก์ชันตรวจสอบ bool check(tree_node* root, tree_node* ptr, int x) {

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