Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. เขียน strcmp() เองที่ไม่สนใจ Case (Case-Insensitive) ใน C++

    โจทย์ สร้างฟังก์ชันเปรียบเทียบสตริง (strcmp) ที่ ไม่สนใจพิมพ์เล็ก/พิมพ์ใหญ่ (case-insensitive) คืนค่า: -1 หาก str1 str2 ตัวอย่าง Input: Hello, hello Output: 0 (เหมือนกันเมื่อไม่สนใจ case) อัลกอริทึม วนลูปเปรียบเทียบตัวอักษรทีละคู่ แปลงทั้งคู่ให้เป็นตัวพิมพ์เล็ก (หรือใหญ่) ก่อนเปรียบเทียบ หากต่าง

  2. เขียน memcpy() และ memmove() เองใน C++

    ฟังก์ชัน memcpy() memcpy() คัดลอกข้อมูลจาก source ไป destination จำนวน n ไบต์ ไม่จัดการ overlapping (หากทับกันพฤติกรรม undefined) Prototype void* memcpy(void* dest, const void* src, size_t n); Implementation #include <cstddef> // size_t void* myMemcpy(void* dest, const void* src, size_t n)

  3. เขียนฟังก์ชัน atoi() เองใน C++

    ฟังก์ชัน atoi() คืออะไร? ฟังก์ชัน atoi() (ASCII to Integer) ใน C/C++ ใช้แปลงสตริง (string) เป็นจำนวนเต็ม (integer) ประกาศอยู่ใน <cstdlib> (C) หรือ <cstdlib> (C++) Syntax int atoi(const char* str); พฤติกรรมมาตรฐาน ข้าม whitespace นำหน้า (leading whitespace) อ่าน sign (+/-) ถ้ามี อ่านตั

  4. เขียนโค้ดตรวจสอบว่าต้นไม้สองต้นเหมือนกัน (Identical Trees) ใน C++

    โจทย์ ได้รับต้นไม้สองต้น ตรวจสอบว่าทั้งสองต้น identical (เหมือนกันทุกประการ) หรือไม่ นิยาม Identical Trees ต้นไม้สองต้น identical ก็ต่อเมื่อ: โครงสร้าง (structure) เหมือนกันทุกอย่าง ค่า (data) ของโหนดที่ตรงกันทุกคู่ มีค่าเท่ากัน ตัวอย่าง ทั้งสองต้นมีค่าและตำแหน่งโหนดเหมือนกัน → Identical อัลก

  5. เขียนฟังก์ชัน pow(x, y) แบบ Iterative O(Log y) ใน C++

    โจทย์ สร้างฟังก์ชันคำนวณ xy แบบ Iterative ที่ทำงานใน O(log y) ตัวอย่าง Input: x = 7, y = 3 Output: 343 อัลกอริทึม: Exponentiation by Squaring (Iterative) หลักการ: แยก y เป็น binary representation แล้วคูณสะสมเฉพาะบิตที่เป็น 1 y = 13 = 11012 x^13 = x^8 * x^4 * x^1 (บิตที่เป็น 1) โค้ดตัวอย่าง = 1;

  6. วิธีตรวจสอบว่าตัวเลขเป็นพหุคูณของ 3 อย่างมีประสิทธิภาพใน C++

    โจทย์ เขียนโปรแกรมตรวจสอบว่าตัวเลขที่กำหนดเป็นพหุคูณของ 3 (หาร 3 ลงตัว) หรือไม่ วิธีทั่วไป (Naive) รวมหลักของตัวเลขทั้งหมด หากผลรวมหาร 3 ลงตัว ตัวเลขก็หาร 3 ลงตัว Time: O(log10 n) - ต้องดึงทุกหลัก วิธีที่มีประสิทธิภาพ (Efficient) - ใช้ Bit Counting ทฤษฎี: ใน binary representation หาก ความต่างระหว่

  7. เขียนโปรแกรมกลับบิต (Reverse Bits) ของตัวเลขอย่างมีประสิทธิภาพใน C++

    โจทย์ ได้รับ unsigned integer n ต้องการคืนค่าตัวเลขที่ได้จากการกลับลำดับบิตทั้งหมด (reverse bits) ตัวอย่าง Input: n = 1 (32-bit) Output: 2147483648 คำอธิบาย binary of 1: 00000000 00000000 00000000 00000001 reversed: 10000000 00000000 00000000 00000000 = 2^31 = 2147483648 วิธีที่ 1: Bit-by-bi

  8. เขียนโปรแกรมกลับตัวเลข (Reverse Digits) ใน C++

    โจทย์ ได้รับจำนวนเต็ม ต้องการกลับลำดับหลัก (digits) ของตัวเลข ตัวอย่าง Input: n = 786521 Output: 125687 อัลกอริทึม ดึงหลักหน่วย (n % 10) บวกเข้า result แล้วหาร n ด้วย 10 ทำซ้ำจน n = 0 0: digit = n % 10 result = result * 10 + digit n = n / 10 วิธีที่ 1: Iterative Approach (แนะนำ) 0)

  9. เขียนโปรแกรมกลับลำดับอาร์เรย์หรือสตริงใน C++

    โจทย์ ได้รับอาร์เรย์หรือสตริง ต้องการกลับลำดับองค์ประกอบ (reverse) ตัวอย่าง Input (array): {2, 5, 7, 1, 9} Output: {9, 1, 7, 5, 2} Input (string): Hello! Output: !olleH อัลกอริทึม ใช้ Two Pointers Technique: กำหนด pointer `start` ที่ต้น (index 0) และ `end` ที่ท้าย (index n-1) Swap องค์ประกอบที่ `

  10. เขียนโปรแกรมหาความสูงสูงสุด (Height/Depth) ของต้นไม้ใน C++

    โจทย์ ได้รับ Binary Tree ต้องการเขียนโปรแกรมหาความสูงสูงสุด (Maximum Depth/Height) ของต้นไม้ นิยาม ความสูงของต้นไม้ (Height) = จำนวนโหนดบนเส้นทางยาวที่สุดจากราก (root) ไปยังใบ (leaf) หรือจำนวน edges บนเส้นทางนั้น (ขึ้นกับนิยาม) ตัวอย่าง ความสูงของต้นไม้ = 3 วิธีแก้ปัญหา (Recursive) ความสูงของโหน

  11. เขียนโปรแกรมคำนวณขนาดของต้นไม้ (Tree Size) ด้วย Recursion (C++)

    โจทย์ ได้รับต้นไม้ (Tree) ต้องการเขียนโปรแกรมคำนวณขนาดของต้นไม้ (Size of Tree) โดยใช้ Recursion นิยาม ขนาดของต้นไม้ (Tree Size) = จำนวนโหนด (nodes) ทั้งหมดในต้นไม้ ตัวอย่าง ต้นไม้ข้างต้นมีขนาด 5 โหนด วิธีแก้ปัญหา (Recursive) ขนาดของต้นไม้ที่รากเป็น node = ขนาด subtree ซ้าย + ขนาด subtree ขวา + 1

  12. เขียนโปรแกรมคำนวณ pow(x, n) ใน C++

    โจทย์ ได้รับจำนวนเต็ม x และ n ต้องเขียนโปรแกรมคำนวณ xn (x ยกกำลัง n) ตัวอย่าง Input: x = 5, n = 3 Output: 125 วิธีแก้ปัญหา: Exponentiation by Squaring (Fast Power) แทนที่จะคูณซ้ำ n ครั้ง (O(n)) ใช้วิธีแบ่งครึ่งกำลัง (divide and conquer): xn = (xn/2)2 หาก n เป็นเลขคู่ xn = x × (xn/2)2 หาก n เป็นเล

  13. เขียนฟังก์ชันหาโหนดที่ N ใน Linked List (C++)

    โจทย์ ได้รับ Linked List และ index n ต้องเขียนฟังก์ชันเพื่อหาโหนดที่ n (0-indexed หรือ 1-indexed ตามกำหนด) ตัวอย่าง Input: linked list = 34 → 4 → 9 → 1, n = 2 Output: 9 (โหนด index 2 คือ 9) วิธีแก้ปัญหา เดินทาง (traverse) linked list จาก head ไปทีละโหนด นับ index จนถึงตำแหน่งที่ต้องการ โค้ดตัวอย่

  14. XOR ของผลรวมทุกคู่ที่เป็นไปได้ในอาร์เรย์ (C++)

    โจทย์ ได้รับอาร์เรย์ขนาด n สร้าง sequence ขนาด n×n โดยแต่ละองค์ประกอบคือผลรวมของคู่ (pair) ของทุกองค์ประกอบในอาร์เรย์กับตัวเอง แล้วหา XOR ของ sequence นี้ทั้งหมด ตัวอย่าง Input: A = {1, 4, 5} Output: 0 คำอธิบาย B = {1+1, 1+4, 1+5, 4+1, 4+4, 4+5, 5+1, 5+4, 5+5} B = {2, 5, 6, 5, 8, 9, 6, 9, 10} XOR

  15. XOR ของความถี่ตัวอักษรที่เป็นจำนวนเฉพาะใน String (C++)

    โจทย์ ได้รับสตริง ต้องการหา XOR ของความถี่ (frequency) ของตัวอักษรที่มีความถี่เป็น จำนวนเฉพาะ (prime number) ตัวอย่าง Input: tutorialspoint Output: 3 วิธีแก้ปัญหา สร้าง boolean array prime[] ด้วย Sieve of Eratosthenes เพื่อเช็คจำนวนเฉพาะ นับความถี่ของแต่ละตัวอักษรในสตริง (ใช้ map<char, int>

  16. XOR ของเส้นทางระหว่างสองโหนดใน Binary Tree (C++)

    โจทย์ ได้รับ Binary Tree และสองโหนด ต้องการหา XOR ของโหนดทั้งหมดบนเส้นทาง (path) ระหว่างสองโหนดนั้น ตัวอย่าง หา XOR ระหว่างโหนด 2 และ 3 เส้นทาง: 2 → 6 → 1 → 3 XOR: 2 ^ 6 ^ 1 ^ 3 วิธีแก้ปัญหา ใช้คุณสมบัติของ XOR และ path ในต้นไม้: คำนวณ XOR จากราก (root) ไปยังทุกโหนด เก็บใน map pathXOR[node] = XO

  17. XOR ของตัวเลขที่ปรากฏจำนวนครั้งคู่ในช่วงที่กำหนด (C++)

    โจทย์ ได้รับอาร์เรย์ขนาด n และ queries หลายช่วง [L, R] ต้องการหา XOR ขององค์ประกอบที่ปรากฏ จำนวนครั้งคู่ (even number of times) ในช่วงนั้น ตัวอย่าง XOR = 1^2^3 = 0 วิธีแก้ปัญหา (Advanced) ใช้ BIT (Binary Indexed Tree / Fenwick Tree) ร่วมกับ Prefix XOR และ Offline Query Processing (Mos algorithm

  18. XOR ของโหนดทั้งหมดใน subtree ของโหนดที่กำหนด (C++)

    โจทย์ ได้รับต้นไม้ (tree) n โหนด และ queries เป็นโหนดต่างๆ ต้องการหา XOR ของโหนดทั้งหมดใน subtree ที่รากอยู่ที่โหนดที่ query ตัวอย่าง Queries: {1, 6, 5} Output: 0, 0, 5 คำอธิบาย Query 1 (node 1): 1^6^3^2^4^7^5 = 0 Query 2 (node 6): 6^2^4 = 0 Query 3 (node 5): 5 = 5 วิธีแก้ปัญหา ทำ DFS (Dept

  19. XOR ของทุกตัวเลขในช่วง [L, R] ใน C++

    โจทย์ ได้รับจำนวนเต็ม 2 จำนวน L และ R แทนช่วง ต้องการหา XOR ของทุกตัวเลขในช่วง [L, R] รวมทั้งสองข้าง ตัวอย่าง Input: L = 3, R = 6 Output: 3 ^ 4 ^ 5 ^ 6 = 4 วิธีแก้ปัญหา ใช้คุณสมบัติของ XOR แบบ bit-by-bit: หา MSB (Most Significant Bit) ของ R - คำตอบจะไม่มีบิตสูงกว่านี้ สำหรับแต่ละ bit position i (

  20. XOR ของ XOR ทุก subarray ใน C++

    โจทย์ ได้รับอาร์เรย์ขนาด n ต้องการหา XOR ของ XOR ทุก subarray ที่เป็นไปได้ (นำไปตามลำดับ) ตัวอย่าง Input: array = {1, 3, 6, 8} Output: 0 คำอธิบาย (1) ^ (3) ^ (6) ^ (8) ^ (1^3) ^ (3^6) ^ (6^8) ^ (1^3^6) ^ (3^6^8) ^ (1^3^6^8) วิธีแก้ปัญหาที่มีประสิทธิภาพ แทนที่จะหา subarray ทุกตัว (O(n2)) ใช้คุณสมบ

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:162/301  20-คอมพิวเตอร์/Page Goto:1 156 157 158 159 160 161 162 163 164 165 166 167 168