Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. หา BST Subtree ใหญ่ที่สุดใน Binary Tree ใน C++ (Set 1)

    ในปัญหานี้ เราได้รับ Binary Tree งานคือหา BST (Binary Search Tree) subtree ที่มีขนาดใหญ่ที่สุด BST Properties Left subtree values < Root value = Root value ตัวอย่าง Output: 3 (Full tree is BST) วิธีที่ 1: Naive O(N²) - Check ทุก Node Inorder traversal + ตรวจสอบทุก node ว่า subtree เป็น BST หรื

  2. หา Good Number มากที่สุดใน Divisors ของ N ใน C++

    ในปัญหานี้ เราได้รับตัวเลข N งานคือหา Good Number มากที่สุดในตัวหารของ N Good Number คืออะไร? ตัวเลขที่ทุกหลักมีค่า มากกว่า ผลรวมของหลักทางขวาทั้งหมด 2 ตัวอย่าง Input: N = 15 Output: 15 Divisors of 15: 1, 3, 5, 15 → 15 เป็น good number มากที่สุด ข้อสังเกตสำคัญ Good number มากที่สุดใน divisors จะ

  3. หาตัวเลขมากที่สุดที่หารด้วย 2, 3, 5 ลงตัวจาก Array หลักเดียวใน C++

    ในปัญหานี้ เราได้รับ array ของหลักเลข (0-9) งานคือจัดเรียงให้ได้ตัวเลขมากที่สุดที่หารด้วย 2, 3, และ 5 ลงตัว (คือหาร 30 ลงตัว) ตัวอย่าง Input: arr[] = {1, 0, 5, 2} Output: 510 510 หาร 2, 3, 5 ลงตัวทั้งคู่ เงื่อนไขความเป็นไปได้ ต้องมีเลข 0 อย่างน้อย 1 ตัว (เพื่อหาร 10 ลงตัว → หาร 2 และ 5 ลงตัว) ผลร

  4. หา Node ที่มีค่ามากที่สุดใน Doubly Linked List ใน C++

    ในปัญหานี้ เราได้รับ Doubly Linked List งานคือหา node ที่มีค่า (data) มากที่สุด ตัวอย่าง Input: 5 ↔ 2 ↔ 9 ↔ 8 ↔ 1 ↔ 3 Output: 9 วิธีการแก้ปัญหา: Traversal แบบง่าย O(N) กำหนด maxNode = head Traverse ทุก node ผ่าน next pointer data → อัปเดต maxNode data ตัวอย่างโค้ด data; } int main() { Node

  5. หาตัวเลขมากที่สุดที่มี N หลักและผลรวมหลักเท่ากับ Sum ใน C++

    ในปัญหานี้ เราได้รับ N (จำนวนหลัก) และ Sum (ผลรวมหลัก) งานคือหาตัวเลขมากที่สุดที่ตรงเงื่อนไข ตัวอย่าง Input: N = 3, Sum = 15 Output: 960 วิธีที่ 1: Brute Force (ช้า) วนจากตัวเลข N หลักมากที่สุดลงมา หาตัวแรกที่ผลรวมหลัก = Sum วิธีที่ 2: Greedy Approach (แนะนำ) O(N) เติมหลักจาก MSB (most significan

  6. หาตัวเลขมากที่สุดที่มี n บิต 1 และ m บิต 0 ใน C++

    ในปัญหานี้ เราได้รับ n (จำนวน set bits) และ m (จำนวน unset bits) งานคือหาตัวเลขมากที่สุดที่มี binary representation ตรงตามเงื่อนไข ตัวอย่าง Input: n = 3, m = 1 Output: 14 Binary: 1110 (3 ones, 1 zero) = 14 วิธีการแก้ปัญหา: Bit Manipulation สร้างตัวเลขที่มี (n+m) บิตเป็น 1 ทั้งหมด: (1 << (n+m)) -

  7. หาคู่ที่มีผลรวมมากที่สุดใน Unsorted Array ใน C++

    ในปัญหานี้ เราได้รับ unsorted array งานคือหา คู่ (pair) ที่มีผลรวมมากที่สุด ตัวอย่าง Input: arr[] = {7, 3, 9, 12, 1} Output: 21 คู่ (9, 12) ให้ผลรวม 21 วิธีการแก้ปัญหา: หา max และ second max แค่ครั้งเดียว O(N) Initialize max และ secondMax จาก arr[0], arr[1] วนลูป i = 2 ถึง n-1 อัปเดต max, secondM

  8. หา 3 ตัวเลขมากที่สุดใน Array ใน C++ (2 วิธี)

    ในปัญหานี้ เราได้รับ unsorted array งานคือหา 3 ตัวเลขมากที่สุด ตัวอย่าง Input: arr[] = {7, 3, 9, 12, 1} Output: 12, 9, 7 วิธีที่ 1: Single Pass O(N) - เก็บ max, max2, max3 void findThreeLargest(int arr[], int n) { int max = arr[0], max2 = arr[0], max3 = arr[0]; for (int i = 1; i max3) max

  9. หา Twin Primes คู่มากที่สุดในช่วงที่กำหนดใน C++

    ในปัญหานี้ เราได้รับช่วง [lValue, hValue] งานคือหา Twin Primes (คู่จำนวนเฉพาะที่ต่างกัน 2) คู่มากที่สุดในช่วงนั้น ตัวอย่าง Input: lValue = 65, rValue = 100 Output: 71, 73 วิธีการแก้ปัญหา: Sieve of Eratosthenes + ตรวจสอบจากขวาไปซ้าย สร้าง boolean array primes[] ด้วย Sieve จนถึง rValue วนลูปจาก rVa

  10. Fitting Shelves Problem: จัดชั้นวางให้เหลือพื้นที่น้อยที่สุดใน C++

    ในปัญหานี้ เราได้รับความยาวผนัง W และขนาดชั้นวาง 2 ขนาด (n, m) งานคือหาวิธีวางชั้นวางให้พื้นที่เหลือน้อยที่สุด โดยให้ความสำคัญกับชั้นวางขนาดใหญ่ก่อน (คุ้มค่ากว่า) ตัวอย่าง Input: W = 12, n = 5, m = 3 Output: 0 4 0 วางชั้นขนาด 3 จำนวน 4 ชั้น = 12 ไม่เหลือพื้นที่ วิธีการแก้ปัญหา: Brute Force + Prior

  11. Fizz Buzz Implementation ใน C++ (พร้อมรูปแบบต่างๆ)

    Fizz Buzz คือโจทย์โปรแกรมมิ่งคลาสสิก: นับ 1 ถึง 100 แทนจำนวนที่หาร 3 ลงตัวด้วย Fizz, หาร 5 ลงตัวด้วย Buzz, หารทั้ง 3 และ 5 ลงตัวด้วย Fizz Buzz ตัวอย่าง Output 1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz Buzz, 16... โค้ดพื้นฐาน #include <iostream> using namespace std;

  12. Flatten Multilevel Linked List ใน C++

    ในปัญหานี้ เราได้รับ Multilevel Linked List ซึ่งแต่ละ Node มี 2 pointer: next (node ถัดไปในระดับเดียวกัน) และ child (head ของ sub-list) งานคือ flatten ให้ node ระดับแรกมาก่อน ตามด้วยระดับที่ 2, 3, ... ตัวอย่างโครงสร้าง Output: 1 9 8 4 6 7 3 2 5 วิธีการแก้ปัญหา: Level Order Traversal แบบปรับเปลี่ย

  13. Flattening a Linked List (รวม Linked List แบบเรียงลำดับ) ใน C++

    ในปัญหานี้ เราได้รับ Linked List ที่แต่ละ Node มี 2 pointer: Right pointer: Node ถัดไปใน list หลัก Down pointer: Head ของ sub-linked-list ที่เรียงลำดับแล้ว ทุก linked list เรียงลำดับอยู่แล้ว งานคือรวม (flatten) ให้กลายเป็น linked list เดียวที่เรียงลำดับ ตัวอย่าง Output: 1 → 4 → 5 → 6 → 7 → 8 → 1

  14. Frugal Number: ตรวจสอบเลขประหยัดใน C++

    ในปัญหานี้ เราได้รับจำนวนเต็มบวก N งานของเราคือตรวจสอบว่า N เป็น Frugal Number หรือไม่ Frugal Number คืออะไร? ตัวเลขที่จำนวนหลัก (digits) ของมัน มากกว่า จำนวนหลักในการแยกตัวประกอบเฉพาะ (prime factorization) อย่างเคร่งครัด ตัวอย่าง 625 → ตัวประกอบเฉพาะ = 54 หลักของ 625 = 3 หลัก หลักของ 54 = 2 หลัก

  15. Game of Nim: ทายผู้ชนะเมื่อเอาหินทีละ 1 ก้อนใน C++

    ในเกม Nim นี้ เรามีกองหิน N ก้อน และผู้เล่น 2 คน (Player A และ Player B) สลับกันเอาหินทีละ 1 ก้อน Player A เริ่มก่อน คนที่เอาหินก้อนสุดท้ายชนะ ตัวอย่างเพื่อเข้าใจปัญหา Input: N = 6 Output: playerB ลำดับ: A-B-A-B-A-B → B เอาก้อนสุดท้าย วิธีการแก้ปัญหา สังเกตรูปแบบ: N = 1 → A ชนะ N = 2 → B ชนะ N =

  16. หา Element แรกที่ปรากฏจำนวนครั้งเป็นเลขคู่ใน Array ใน C++

    ในปัญหานี้ เราได้รับอาร์เรย์ arr[] ขนาด N งานของเราคือการหา element แรกที่ปรากฏจำนวนครั้งเป็นเลขคู่ ถ้าไม่มีให้คืน -1 ตัวอย่างเพื่อเข้าใจปัญหา Input: arr[] = {2, 3, 7, 2, 3, 6, 4, 1, 2} Output: 3 วิธีการแก้ปัญหา ใช้ Hash Map (unordered_map) เก็บ toggle state (true/false) แทนการนับความถี่จริง: Tra

  17. หาค่า (n^1 + n^2 + n^3 + n^4) mod 5 ใน C++

    ในปัญหานี้ เราได้รับค่า n งานของเราคือการหาค่า (n1 + n2 + n3 + n4) mod 5 ตัวอย่างเพื่อเข้าใจปัญหา Input: n = 5 Output: 0 (5 + 25 + 125 + 625) % 5 = 780 % 5 = 0 วิธีที่ 1: คำนวณโดยตรง (อาจ overflow ได้) #include <iostream> using namespace std; int findMod5Val(int n) { int val = (n + (n*n

  18. หาค่า k-th bit ในตัวแทนบิตของตัวเลขใน C++

    ในปัญหานี้ เราได้รับค่า n และ k งานของเราคือการหาค่าของ k-th bit ในตัวแทนบิตของ n ตัวอย่างเพื่อเข้าใจปัญหา Input: n = 5, k = 2 Output: 0 Binary of 5 = 0101, บิตที่ 2 จากขวา (LSB) คือ 0 วิธีการแก้ปัญหา ใช้ bitwise AND ระหว่าง n กับ mask ที่มีบิตที่ k-th เป็น 1 (1 << (k-1)) แล้ว shift กลับมา ตัวอย่

  19. ความแตกต่างระหว่าง For Loop และ While Loop ใน C++

    ลูป (Loops) ในการเขียนโปรแกรมใช้สำหรับรันบล็อกโค้ดซ้ำหลายครั้ง ที่นี่เราจะเปรียบเทียบสองประเภทของลูป: For Loop และ While Loop For Loop For Loop เป็นลูปควบคุมการทำซ้ำที่รันบล็อกโค้ดจำนวนครั้งที่กำหนดไว้ล่วงหน้า Syntax for (initialization; condition; update) { // code to be repeated } While Loo

  20. หาค่า y mod (2^x) ใน C++

    ในปัญหานี้ เราได้รับค่า x และ y งานของเราคือการหาค่า y mod (2x) ตัวอย่างเพื่อเข้าใจปัญหา Input: x = 2, y = 19 Output: 3 เพราะ 19 % 22 = 19 % 4 = 3 วิธีการแก้ปัญหา พิจารณา 3 กรณีหลัก: ถ้า log2(y) < x → ผลลัพธ์คือ y (เพราะ y < 2x) 63 → ผลลัพธ์คือ y (ป้องกัน overflow) กรณีอื่น → คำนวณ y % (1 << x)

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:285/301  20-คอมพิวเตอร์/Page Goto:1 279 280 281 282 283 284 285 286 287 288 289 290 291