Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. Bulb Switcher หาจำนวนหลอดไฟที่เปิดอยู่หลัง n รอบใน C++

    มีหลอดไฟ n ดวง ปิดทั้งหมด รอบที่ 1: เปิดทุกดวง รอบที่ 2: ปิดทุก 2 ดวง รอบที่ i: สลับทุก i ดวง รอบที่ n: สลับดวงสุดท้าย หาจำนวนหลอดที่เปิดอยู่หลัง n รอบ ตัวอย่าง: n=3 → 1 ดวง (ลำดับ: [on,on,on] → [on,off,on] → [on,off,off]) วิธีแก้ปัญหา (Mathematical Insight: Perfect Squares) หลอดไฟสลับสถานะเมื่อรอ

  2. Implement Rand10() Using Rand7() สร้าง Rand10 จาก Rand7 ใน C++

    มีฟังก์ชัน rand7() สุ่มจำนวนเต็ม 1-7 สม่ำเสมอ เขียน rand10() สุ่ม 1-10 สม่ำเสมอ (ห้ามใช้ library random) วิธีแก้ปัญหา (Rejection Sampling) ใช้ rand7() 2 ครั้ง สร้างตัวเลข 0-48 (49 ค่า): (rand7()-1)×7 + (rand7()-1) ตัดทิ้งค่า ≥ 40 (เหลือ 40 ค่า = 4×10) แล้ว mod 10 + 1 ตัวอย่างโค้ด C++ = 40) {

  3. Matchsticks to Square จับไม้ขีดไฟเป็นสี่เหลี่ยมจัตุรัสใน C++

    กำหนดความยาวไม้ขีดไฟหลายเส้น หาว่าจับเป็นสี่เหลี่ยมจัตุรัสได้ไหม (ใช้หมดทุกเส้น ห้ามหัก) ตัวอย่าง: [1,1,2,2,2] → true (ด้านยาว 2: 1+1, 2, 2, 2) วิธีแก้ปัญหา (Backtracking + Pruning) ถ้าผลรวมไม่หาร 4 ลงตัว → false target = sum/4, เรียงไม้จากใหญ่ไปเล็ก (pruning เร็วขึ้น) DFS/Backtracking ใส่ไม้แต่ล

  4. Ones and Zeroes หาสตริงไบนารีสูงสุดภายใต้ข้อจำกัด 0 และ 1 ใน C++

    มี m ตัว 0 และ n ตัว 1 ให้อาร์เรย์สตริงไบนารี หาจำนวนสตริงสูงสุดที่สร้างได้ (แต่ละ 0 และ 1 ใช้ได้สูงสุด 1 ครั้ง) ตัวอย่าง: [10,0001,111001,1,0], m=5, n=3 → 4 สตริง (10,0001,1,0) วิธีแก้ปัญหา (0/1 Knapsack 2D DP) DP table dp[m+1][n+1] = จำนวนสตริงสูงสุด วนทุกสตริง str: นับ one, zero ใน str วน j =

  5. Generate Random Point in a Circle สุ่มจุดในวงกลมใน C++

    กำหนดรัศมีและตำแหน่งศูนย์กลางวงกลม เขียน randPoint() สุ่มจุดในวงกลมแบบสม่ำเสมอ (uniform) จุดบนเส้นรอบวงถือว่าอยู่ในวงกลม วิธีแก้ปัญหา (Polar Coordinates + sqrt for Uniform Distribution) ใช้พิกัดขั้ว: r = √(uniform()), θ = 2π × uniform() จุด = (center_x + r×radius×cosθ, center_y + r×radius×sinθ) ต้

  6. Magical String สตริงเวทมนตร์นับจำนวน 1 ใน C++

    สตริงเวทมนตร์ S ประกอบด้วย 1 และ 2 โดยการนับตัวติดกันของ 1 และ 2 จะสร้าง S เอง S = 1221121221221121122... จัดกลุ่ม: 1, 22, 11, 2, 1, 22, 1, 22, 11, 2, 11, 22... → จำนวน: 1,2,2,1,1,2,1,2,2,1,2,2... = S เอง ให้ N หาจำนวน 1 ใน N ตัวแรกของ S ตัวอย่าง: N=6 → 122112 → 3 ตัว วิธีแก้ปัญหา (Two Pointers Ge

  7. Increasing Subsequences หาลำดับย่อยเพิ่มขึ้นทั้งหมดใน C++

    ให้อาร์เรย์จำนวนเต็ม หา increasing subsequences ทั้งหมดที่ความยาว ≥ 2 (ไม่ซ้ำกัน) ตัวอย่าง: [4,6,7,7] → [[4,6],[4,7],[4,6,7],[4,6,7,7],[6,7],[6,7,7],[7,7],[4,7,7]] วิธีแก้ปัญหา (Backtracking + Dedup per Level) ฟังก์ชัน solve(nums, start, temp): 1 → ใส่ temp ลง res visited = เซตว่าง (กันซ้ำในระด

  8. Teemo Attacking คำนวณเวลาสมพิษรวมใน C++

    ในเกม LOL เทมโม่โจมตีแอชทำให้เป็นพิษ กำหนดเวลาโจมตี t[] (เรียงเพิ่ม) และระยะเวลาพิษ d หาเวลารวมที่แอชเป็นพิษ ตัวอย่าง: t=[1,4], d=2 → 4 (เวลา 1-2 และ 4-5 ไม่ทับซ้อน) วิธีแก้ปัญหา (Interval Merging) ret = 0, currEnd = -1 วนแต่ละการโจมตี t[i]: start = t[i], end = t[i] + d - 1 ถ้า currEnd < start:

  9. Random Point in Non-overlapping Rectangles สุ่มจุดในสี่เหลี่ยมไม่ทับซ้อนใน C++

    ให้ลิสต์สี่เหลี่ยมผืนผ้าไม่ทับซ้อน rects[i] = [x1,y1,x2,y2] (มุมซ้ายล่างและขวาบน) เขียนฟังก์ชัน pick() สุ่มจุดจำนวนเต็มในพื้นที่ที่สี่เหลี่ยมครอบคลุมอย่างสม่ำเสมอ จุดบนเส้นรอบรูปถือว่าอยู่ในพื้นที่ วิธีแก้ปัญหา (Weighted Random Selection) คำนวณพื้นที่แต่ละสี่เหลี่ยม: area = (x2-x1+1) × (y2-y1+1)

  10. Diagonal Traverse เรียงเมทริกซ์แบบเฉียงใน C++

    ให้เมทริกซ์ M×N เรียงสมาชิกตามทิศทางเฉียง (zigzag diagonal) ตัวอย่าง: [[1,2,3],[4,5,6],[7,8,9]] → [1,2,4,7,5,3,6,8,9] วิธีแก้ปัญหา (Diagonal Grouping) แบ่งเมทริกซ์เป็นแนวทแยง: เริ่มจากแถวแรกทุกคอลัมน์ แล้วคอลัมน์สุดท้ายทุกแถว สลับทิศทาง (reverse) ทุกแนวทแยงสลับกัน รวมผลลัพธ์ ตัวอย่างโค้ด C++ #i

  11. Longest Palindromic Subsequence หาลำดับย่อยพาลินโดรมที่ยาวที่สุดใน C++

    ให้สตริง s หาความยาวของ longest palindromic subsequence (LPS) สมมติความยาวสูงสุด 1000 ตัวอย่าง: bbbab → 4 (subsequence bbbb) วิธีแก้ปัญหา (DP: LCS กับสตริงกลับ) LPS(s) = LCS(s, reverse(s)) x = reverse(s), n = s.length() สร้าง DP table (n+1)×(n+1) dp[i][j] = max(dp[i][j-1], dp[i-1][j]) ถ้า x[i] ==

  12. Random Flip Matrix สุ่มพลิกเมทริกซ์ใน C++

    มีเมทริกซ์ไบนารี n_rows × n_cols เริ่มต้นเป็น 0 ทั้งหมด เขียนฟังก์ชัน flip() สุ่มเลือก 0 หนึ่งช่อง เปลี่ยนเป็น 1 คืนตำแหน่ง [row,col] และ reset() รีเซ็ตทั้งหมดเป็น 0 เพิ่มประสิทธิภาพ: ลดการเรียก random(), ปรับเวลาและพื้นที่ วิธีแก้ปัญหา (Hash Map + Virtual Array) เก็บ map holes สำหรับ index ที่ถู

  13. Continuous Subarray Sum ตรวจสอบสับอาร์เรย์ติดกันที่หารด้วย k ลงตัวใน C++

    ให้อาร์เรย์จำนวนไม่ติดลบ และ k หาว่ามี subarray ติดกันขนาด ≥ 2 ที่ผลรวมหารด้วย k ลงตัว (เป็น n×k) หรือไม่ ตัวอย่าง: [23,2,4,6,7], k=6 → true (subarray [2,4] ผลรวม 6) วิธีแก้ปัญหา (Prefix Sum Modulo + Hash Map) map m เก็บ {prefix_sum_mod_k: index}, m[0] = -1 sum = 0 วน i = 0 ถึง n-1: sum += nums[

  14. Longest Word in Dictionary through Deleting ใน C++

    ให้สตริง s และดิกชันนารี d หาคำที่ยาวที่สุดใน d ที่สามารถสร้างได้โดยการลบตัวอักษรบางส่วนจาก s หากมีหลายคำ ให้คำที่มาก่อนตามลำดับเล็กซิโคกราฟิก ตัวอย่าง: s=abpcplea, d=[ale,apple,monkey,plea] → apple วิธีแก้ปัญหา (Two Pointers Subsequence Check) ฟังก์ชัน isSubsequence(s1, s2): ตรวจสอบว่า s2 เป็น s

  15. Contiguous Array หาสับอาร์เรย์ติดกันที่มี 0 และ 1 เท่ากันใน C++

    ให้อาร์เรย์ไบนารี หาความยาวสูงสุดของ subarray ติดกันที่มีจำนวน 0 และ 1 เท่ากัน ตัวอย่าง: [0,1,0] → 2 (subarray [0,1] หรือ [1,0]) วิธีแก้ปัญหา (Prefix Sum + Hash Map) แปลง 0 → -1, 1 → +1 หา subarray ที่ผลรวม = 0 (ยาวที่สุด) ret = 0, sum = 0, map m เก็บ {sum: index} m[0] = -1 วน i = 0 ถึง n-1: sum

  16. Beautiful Arrangement นับการจัดเรียงที่สวยงามใน C++

    ให้จำนวนเต็ม 1 ถึง N จัดเรียงเป็นอาร์เรย์ ถ้าทุกตำแหน่ง i (1≤i≤N) ต้องเป็นจริงอย่างน้อย 1 ข้อ: ตัวเลขที่ตำแหน่ง i หาร i ลงตัว i หารตัวเลขที่ตำแหน่ง i ลงตัว ตัวอย่าง: N = 2 → 2 วิธี: [1,2] และ [2,1] วิธีแก้ปัญหา (Backtracking + Pruning) ฟังก์ชัน solve(visited, end, pos=1): ถ้า pos = end+1 → เพิ

  17. Random Pick with Weight สุ่มดัชนีตามน้ำหนักใน C++

    ให้อาร์เรย์ w ของจำนวนเต็มบวก w[i] คือน้ำหนักของดัชนี i เขียนฟังก์ชัน pickIndex() ที่สุ่มดัชนีตามสัด่วนน้ำหนัก ตัวอย่าง: w = [1,3] เรียก pickIndex() 5 ครั้ง → อาจได้ 0, 1, 1, 1, 0 วิธีแก้ปัญหา (Prefix Sum + Binary Search) สร้าง prefix sum array: w[i] = w[i] + w[i-1] สุ่มตัวเลข r ในช่วง [0, w.back

  18. หาพจน์ที่ N ของอนุกรม 3, 5, 33, 35, 53, 55... ใน C++

    หาพจน์ที่ N ของอนุกรม: 3, 5, 33, 35, 53, 55, ... (ประกอบด้วยเลข 3 และ 5 เท่านั้น) ตัวอย่าง: N = 6 → 55 วิธีแก้ปัญหา (DP / Recursive Construction) สร้างอาร์เรย์ arr ขนาด n+1: arr[1] = 3, arr[2] = 5 สำหรับ i = 3 ถึง n: ถ้า i คี่: arr[i] = arr[i/2] × 10 + 3 ถ้า i คู่: arr[i] = arr[(i/2)-1] × 10 + 5

  19. หาตัวหารร่วมมาก (HCF/GCD) แบบวนซ้ำใน C++

    หาตัวหารร่วมมาก (HCF/GCD) ของสองจำนวนด้วยวิธีการลบซ้ำ (Euclidean algorithm แบบ subtraction) ตัวอย่าง: 60 และ 96 → 12 วิธีแก้ปัญหา (Subtraction-based Euclidean Algorithm) while a ≠ b: b → a = a - b มิฉะนั้น → b = b - a คืนค่า a (หรือ b) ตัวอย่างโค้ด C++ b) a = a - b; else b = b - a;

  20. ตรวจสอบตัวอักษรเป็นสระหรือพยัญชนะใน C++

    ตรวจสอบว่าตัวอักษรที่ให้มาเป็นสระ (a,e,i,o,u) หรือพยัญชนะ ตัวอย่าง: c → Consonant, e → Vowel ตัวอย่างโค้ด C++ #include <iostream> using namespace std; void is_vowel(char x) { if (x == a || x == e || x == i || x == o || x == u) cout << Vowel << endl; else cout << Cons

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:169/301  20-คอมพิวเตอร์/Page Goto:1 163 164 165 166 167 168 169 170 171 172 173 174 175