Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. Ugly Number III ใน C++ : หา Ugly Number ลำดับที่ N

    Ugly Number** ในโจทย์นี้ หมายถึงจำนวนเต็มบวกที่ **หารด้วย a, b, หรือ c ลงตัว** (ไม่ใช่นิยามคลาสสิก 2,3,5) โจทย์: หา **Ugly Number ลำดับที่ n** (1-indexed) ตัวอย่าง n = 3, a = 2, b = 3, c = 5 Ugly Numbers: 2, 3, 4, 5, 6, 8, 9, 10, ... ลำดับที่ 3 คือ 4 แนวทาง: Binary Search + Inclusion-Exclusion Pr

  2. สตริงเล็กที่สุดนิยามลีกซิโคกราฟิกด้วยการสป (Smallest String With Swaps) ใน C++

    ให้ String s และ Array ของคู่ Index pairs โดย pairs[i] = [a, b] หมายถึงเราสามารถ **สลับตัวอักษรตำแหน่ง a และ b ได้ไม่จำกัดครั้ง** (โดยตรงหรือโดยอ้อมผ่าน Chain ของ Pairs) เป้าหมาย: หา String ที่ **เล็กที่สุดนิยาม Lexicographically** ที่ได้จากการสปตาม Pairs ที่อนุญาต ตัวอย่าง s = dcab, pairs = [[0,3

  3. หา Substring ยาวที่สุดที่แก้ไขได้ภายใน Budget (Get Equal Substrings Within Budget) ใน C++

    ให้ String สองตัว s และ t ความยาวเท่ากัน เราต้องการเปลี่ยน s ให้กลายเป็น t โดยการเปลี่ยนตัวอักษรตำแหน่งที่ i จาก s[i] เป็น t[i] มี **ค่าใช้จ่าย (Cost)** เท่ากับ |s[i] - t[i]| (ค่าสัมบูรณ์ของความต่าง ASCII) กำหนด maxCost เป็นงบประมาณสูงสุด หา **ความยาวสูงสุด (Maximum Length)** ของ Substring ที่สามาร

  4. ความน่าจะเป็นการนั่งที่นั่งเครื่องบิน (Airplane Seat Assignment Probability) ใน C++

    โจทย์คลาสสิก: มีผู้โดยสาร n คน** ขึ้นเครื่องบินที่มีที่นั่ง **n ที่นั่ง** (หมายเลข 1 ถึง n) ผู้โดยสารคนแรก **สูญเสียตั๋ว** จึงนั่งสุ่ม ที่นั่งใดก็ได้ ผู้โดยสารคนต่อๆ ไปจะทำตามกติกา: นั่งที่นั่งของตัวเอง **สุ่ม** เลือกที่นั่งว่างที่เหลือ โจทย์: หาความน่าจะเป็นที่ **ผู้โดยสารคนที่ n (คนสุดท้าย)**

  5. การพิมพ์ Immutable Linked List ย้อนหลังใน C++

    สมมติว่าเรามี Immutable Linked List (Linked List ที่ไม่สามารถแก้ไขโครงสร้างได้) เราต้องพิมพ์ค่าของทุกโหนด (Node) เรียงจากหลังมาหน้า โดยใช้ Interface ที่กำหนดดังนี้: ImmutableListNode : Interface ของ Immutable Linked List เราจะได้รับ Head ของ List ฟังก์ชันที่ใช้ได้มีเพียง 2 ตัว: ImmutableListNo

  6. Input Iterators ใน C++ : ตัวอย่างและคำอธิบาย

    ในบทช่วยสอนนี้ เราจะมาทำความเข้าใจ Input Iterators ใน C++ Standard Template Library (STL) ครับ Input Iterators เป็นหนึ่งใน 5 ประเภทของ Iterator ใน STL (อีก 4 ประเภทคือ Output, Forward, Bidirectional, Random Access) ถือเป็น Iterator ที่ อ่อนแอและเรียบง่ายที่สุด ใช้งานหลักคือสำหรับ การอ่านข้อมูลแบบลำ

  7. การแทรกและลบข้อมูลใน STL Set ของ C++

    ในบทช่วยสอนนี้ เราจะมาสำรวจการแทรก (Insertion) และการลบ (Deletion) ข้อมูลใน STL Set ของภาษา C++ ครับ Set เป็นโครงสร้างข้อมูลแบบ Container ที่มีคุณสมบัติพิเศษคือ จัดเก็บค่าที่ ไม่ซ้ำกัน (Unique) เท่านั้น และจะจัดเก็บข้อมูลในลำดับที่ เรียงลำดับจากน้อยไปมาก (Sorted) โดยอัตโนมัติ ทำให้เหมาะสำหรับการค้น

  8. Insertion Sort ใช้ C++ STL

    คำอธิบาย Implementation ของ Insertion Sort โดยใช้ std::upper_bound หาตำแหน่งที่ควรวาง และ std::rotate ย้าย element วิธีทำ วน i จาก begin() ถึง end() หา insertion_point = upper_bound(begin, i, *i) rotate(insertion_point, i, i+1) ย้าย element ไปตำแหน่งที่ถูกต้อง ตัวอย่างโค้ด #include <bits/stdc

  9. รายละเอียดภายในของ std::sort() ใน C++

    คำอธิบาย std::sort ใช้ Introsort (Introspective Sort) เป็น hybrid algorithm: เริ่มด้วย Quick Sort (เฉลี่ย O(n log n)) ถ้าความลึก recursion เกิน 2 * log2(n) → สลับเป็น Heap Sort (worst-case O(n log n)) ขนาดเล็ก (มัก < 16) → ใช้ Insertion Sort ไม่เสถียร (unstable) แต่เร็วและรับประกัน O(n log n) wors

  10. Iterator Invalidation ใน C++

    คำอธิบาย Iterator Invalidation** เกิดขึ้นเมื่อ iterator ชี้ไปที่ตำแหน่งที่ไม่ถูกต้องอีกต่อไป เนื่องจาก container เปลี่ยนแปลงขนาดหรือจัดสรรหน่วยความจำใหม่ กรณีที่พบบ่อย vector: push_back/insert/erase อาจทำให้ reallocate → iterator ทั้งหมด invalid list/deque: insert/erase invalidates เฉพาะ iterator

  11. Lower Bound ใน C++

    คำอธิบาย std::lower_bound (ใน <algorithm>) หา iterator แรกในช่วงที่เรียงแล้ว ที่มีค่า มากกว่าหรือเท่ากับ ค่าที่กำหนด Complexity: O(log n) สำหรับ random-access iterator ต้องการ container ที่เรียงลำดับแล้ว ตัวอย่าง #include <bits/stdc++.h> using namespace std; int main() { vector&l

  12. Kruskal's Minimum Spanning Tree ใช้ STL ใน C++

    คำอธิบาย อัลกอริทึม Kruskal หา Minimum Spanning Tree (MST) ของกราฟเชื่อมต่อไม่มีทิศทางมีน้ำหนัก ใช้ Disjoint Set Union (DSU) และ เรียง edge ตามน้ำหนัก ขั้นตอน เรียง edges ตามน้ำหนักน้อยไปมาก สร้าง DSU สำหรับแต่ละ vertex วน edge: ถ้าจุดปลายอยู่คนละ component → union และเพิ่มใน MST หยุดเมื่อมี edge

  13. MakeFile ใน C++ และการประยุกต์ใช้

    คำอธิบาย Makefile คือไฟล์สคริปต์สำหรับอัตโนมัติการคอมไพล์โปรเจกต์ C++ ขนาดใหญ่ แยก source code เป็นหลายไฟล์ (.cpp, .h) แล้ว link รวมกัน โครงสร้างตัวอย่าง project/ ├── Makefile ├── main.cpp ├── functions.h ├── multiply.cpp ├── factorial.cpp └── print.cpp Makefile CC = g++ CFLAGS = -Wall -std=c++11

  14. order_of_key() ใน C++

    คำอธิบาย order_of_key() เป็นฟังก์ชันของ Policy-Based Data Structure (PBDS) ใน GNU C++ (<ext/pb_ds/assoc_container.hpp>) ใช้กับ tree (ordered_set) คืนจำนวน elements ที่ น้อยกว่า key อย่างเคร่งครัด ตัวอย่าง iterator ของ element ลำดับ k (0-indexed) cout << Element at order 2: <<

  15. multiset size() ใน C++ STL

    คำอธิบาย size() คืนจำนวน elements ปัจจุบันใน multiset (รวม duplicate ด้วย) ตัวอย่าง #include <bits/stdc++.h> using namespace std; int main() { multiset<int> ms; cout << Size: << ms.size() << endl; // 0 ms.insert(10); ms.insert(13); cout <&

  16. multiset max_size() ใน C++ STL

    คำอธิบาย max_size() คืนจำนวนสูงสุดของ elements ที่ multiset สามารถจัดเก็บได้ (ขึ้นกับ architecture และ memory) ตัวอย่าง #include <bits/stdc++.h> using namespace std; int main() { multiset<int> ms; ms.insert(10); ms.insert(13); ms.insert(13); ms.insert(25); ms.in

  17. negative_binomial_distribution ใน C++

    คำอธิบาย negative_binomial_distribution ใน <random> สร้างจำนวนล้มเหลว (failures) ก่อนได้ความสำเร็จ (successes) ครั้งที่ k ตามการแจกแจง negative binomial พารามิเตอร์: k (จำนวน success ที่ต้องการ), p (ความน่าจะเป็น success) คืนค่า: จำนวน failures ก่อนได้ k successes ตัวอย่าง: จำลองการทอยเหรีย

  18. multiset upper_bound() ใน C++ STL

    คำอธิบาย upper_bound(key) คืน iterator ชี้ไปยัง element แรกที่ มากกว่า key อย่างเคร่งครัด หากไม่มี จะคืน end() ตัวอย่าง 3) it = ms.upper_bound(2); cout << upper_bound(2): << *it << endl; // 3 it = ms.upper_bound(10); cout << upper_bound(10): <

  19. multiset lower_bound() ใน C++ STL

    คำอธิบาย lower_bound(key) คืน iterator ชี้ไปยัง element แรกที่ มากกว่าหรือเท่ากับ key หากไม่มี จะคืน end() ตัวอย่าง = 3) it = ms.lower_bound(7); cout << lower_bound(7): << (it == ms.end() ? end() : to_string(*it)) << endl; return 0; } เอาต์พุต Elements: 1 1

  20. Multiset ใน C++ Standard Template Library (STL)

    คำอธิบาย multiset เป็น associative container คล้าย set แต่ อนุญาตให้มีค่าซ้ำได้ จัดเก็บข้อมูลเรียงลำดับอัตโนมัติ (default: น้อยไปมาก) คุณสมบัติหลัก Insert/Erase/Find: O(log n) รองรับ duplicate values Iterator ชี้ไปตามลำดับที่เรียงแล้ว มี lower_bound, upper_bound, equal_range ตัวอย่างโค้ด #includ

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:153/301  20-คอมพิวเตอร์/Page Goto:1 147 148 149 150 151 152 153 154 155 156 157 158 159