Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. ผลรวมค่าเฉลี่ยสูงสุดของการแบ่งกลุ่ม (Largest Sum of Averages) ใน C++

    แบ่งอาร์เรย์ A เป็นสูงสุด K กลุ่มติดกัน คะแนน = ผลรวมค่าเฉลี่ยแต่ละกลุ่ม หาคะแนนสูงสุด ตัวอย่าง Input − A=[9,1,2,3,9], K=3 Output − 20 คำอธิบาย − แบ่ง: [9], [1,2,3], [9] → 9 + (6/3) + 9 = 20 แนวทางการแก้ปัญหา (DP + Memoization) dp[i][k] = คะแนนสูงสุดจากตำแหน่ง i ด้วย k กลุ่มที่เหลือ ลองจบกลุ่มที่

  2. ส่วนประกอบที่เชื่อมต่อในรายการเชื่อมโยง (Linked List Components) ใน C++

    ได้รับ linked list และเซต G (subset ของค่าใน list) หาจำนวน connected components ใน G โดยสองค่าเชื่อมต่อกันถ้าอยู่ติดกันใน linked list ตัวอย่าง Input − list=[0,1,2,3], G=[0,1,3] Output − 2 คำอธิบาย − 0-1 ติดกันเป็น component หนึ่ง, 3 อยู่คนเดียวอีก component → รวม 2 แนวทางการแก้ปัญหา ใส่ค่า G ลง s

  3. Short Encoding of Words: การเข้ารหัสสตริงสั้นที่สุดใน C++

    ปัญหา กำหนด List ของ Words เข้ารหัสโดยสตริงอ้างอิง S และ Index Array A โดยแต่ละ Word อ่านจาก S เริ่มที่ Index จนเจอ # หา ความยาวสั้นที่สุดของ S ตัวอย่าง: [time, me, bell] → S = time#bell# (ความยาว 10) Index = [0, 2, 5] ข้อสังเกตสำคัญ ถ้า Word A เป็น Suffix ของ Word B → A ไม่ต้องใส่ใน S แยก (อยู่ใน

  4. เกมพลิกไพ่ (Card Flipping Game) ใน C++

    มีไพ่ N ใบ แต่ละใบมีตัวเลขสองด้าน (fronts[i], backs[i]) สามารถพลิกไพ่ได้ หลังพลิกเลือกไพ่หนึ่งใบ ถ้าตัวเลขด้านหลังไม่อยู่ด้านหน้าของไพ่ใดๆ เรียกว่า good หาตัวเลข good ที่น้อยที่สุด ตัวอย่าง Input − fronts=[1,2,4,4,7], backs=[1,3,4,1,3] Output − 2 คำอธิบาย − พลิกไพ่ที่ 2: fronts=[1,3,4,4,7], backs=[

  5. Binary Trees With Factors: ต้นไม้ไบนารีที่มีปัจจัยใน C++

    ปัญหา กำหนดอาร์เรย์จำนวนเต็มบวก A 1) สร้าง Binary Tree โดย: - ใช้ตัวเลขใน A ได้ไม่จำกัดครั้ง - โหนดที่ไม่ใช่ Leaf ต้องมีค่า = ผลคูณของลูก 2 ตัว หาจำนวนต้นไม้ที่สร้างได้ Modulo 10^9 + 7 ตัวอย่าง: A = [2,4,5,10] → 7 ต้นไม้: [2], [4], [5], [10], [4,2,2], [10,2,5], [10,5,2] แนวคิด: DP บนค่าที่เรียงแล้

  6. Friends Of Appropriate Ages: เพื่อนที่อายุเหมาะสมใน C++

    ปัญหา มีคนกลุ่มหนึ่งมีอายุใน ages[] คน A จะ ไม่ ส่ง Friend Request ให้ B (B ≠ A) ถ้า: age[B] ≤ 0.5 × age[A] + 7 age[A] 100 && age[A] < 100 นอกจากนี้จะส่ง Request หาจำนวน Request ทั้งหมด ตัวอย่าง: [16,17,18] → 2 Requests: 17→16, 18→17 แนวคิด: Bucket Count + Prefix Sum เงื่อนไขที่ทำให้ A ส่ง Re

  7. ค้นหาและแทนที่ในสตริง (Find And Replace in String) ใน C++

    ได้รับสตริง S และรายการการแทนที่: index, source, target หาก source เริ่มที่ index ใน S ต้นฉบับ ให้แทนที่ด้วย target มิฉะนั้นข้ามไป ตัวอย่าง Input − S=abcd, indexes=[0,2], sources=[a,cd], targets=[eee,ffff] Output − eeebffff คำอธิบาย − index 0: a→eee, index 2: cd→ffff (ใช้ S ต้นฉบับ) แนวทางการแก้ปั

  8. เกม 21 ใหม่ (New 21 Game) ใน C++

    ริมาเริ่มต้น 0 คะแนน จั่วไพ่ได้คะแนนสุ่ม 1 ถึง W จนกว่าจะได้ ≥ K คะแนน หาความน่าจะเป็นที่คะแนนสุดท้าย ≤ N ตัวอย่าง Input − N=6, K=1, W=10 Output − 0.6 คำอธิบาย − จั่ว 1 ครั้งหยุด (K=1) โอกาสได้ 1-6 คือ 6/10 = 0.6 แนวทางการแก้ปัญหา (Dynamic Programming + Sliding Window) dp[i] = ความน่าจะเป็นที่ได้

  9. หาภูเขาที่ยาวที่สุดในอาร์เรย์ (Longest Mountain in Array) ใน C++

    Subarray เรียกว่า ภูเขา (mountain) ถ้า: ความยาว ≥ 3 มีจุดสูงสุด (peak) ที่เพิ่มขึ้นอย่างเคร่งครัดถึงจุดนั้น แล้วลดลงอย่างเคร่งครัดหลังจุดนั้น ตัวอย่าง Input − [2,1,4,7,3,2,5] Output − 5 คำอธิบาย − ภูเขาที่ยาวที่สุด: [1,4,7,3,2] ความยาว 5 แนวทางการแก้ปัญหา (Two Pointers) วนหาจุดเริ่มต้นของภูเขา

  10. การจัดกลุ่มไพ่เป็นลำดับต่อเนื่อง (Hand of Straights) ใน C++

    ได้รับมือไพ่เป็นอาร์เรย์จำนวนเต็ม ต้องการจัดเป็นกลุ่มขนาด W ให้แต่ละกลุ่มเป็นตัวเลขติดต่อกัน W ตัว ตรวจสอบว่าทำได้หรือไม่ ตัวอย่าง Input − hand = [1,2,3,6,2,3,4,7,8], W = 3 Output − true คำอธิบาย − จัดได้: [1,2,3], [2,3,4], [6,7,8] แนวทางการแก้ปัญหา (Greedy + Map) ถ้าจำนวนไพ่ไม่หาร W ลงตัว → fals

  11. การเลื่อนตัวอักษร (Shifting Letters) ใน C++

    ได้รับสตริง S และอาร์เรย์ shifts โดย shifts[i] = x หมายถึงเลื่อนตัวอักษร i+1 ตัวแรก x ครั้ง (z เลื่อนเป็น a) หาสตริงผลลัพธ์หลังเลื่อนทั้งหมด ตัวอย่าง Input − S = abc, shifts = [3,5,9] Output − rpl คำอธิบาย − 1. เลื่อน 1 ตัวแรก 3: dbc 2. เลื่อน 2 ตัวแรก 5: igc 3. เลื่อน 3 ตัวแรก 9: rpl แนวทางการ

  12. กลุ่มรถ (Car Fleet) ใน C++

    มีรถ N คันเดินทางไปจุดหมายระยะ target ไมล์ รถแต่ละคันมีตำแหน่งเริ่มต้น position[i] และความเร็ว speed[i] รถไม่สามารถแซงกันได้ จะขับติดกันเป็นฝูง (fleet) หาจำนวน fleet ที่ถึงจุดหมาย ตัวอย่าง Input − target=12, pos=[10,8,0,5,3], speed=[2,4,1,1,3] Output − 3 คำอธิบาย − รถที่ 10 และ 8 รวมเป็น fleet ที่

  13. คะแนนของวงเล็บ (Score of Parentheses) ใน C++

    ได้รับสตริงวงเล็บที่สมดุล (balanced parentheses) งานคือคำนวณคะแนนตามกติกา: () = 1 คะแนน AB = A + B (ต่อกัน) (A) = 2 × A ตัวอย่าง Input − (()(())) Output − 6 คำอธิบาย − ( () (()) ) = 2 × (1 + 2×1) = 2 × 3 = 6 แนวทางการแก้ปัญหา (Stack) ใช้ stack เก็บค่า: -1 แทน (, คะแนนสำหรับ ) เจอ ( → push -1 เจ

  14. การสะท้อนกระจก (Mirror Reflection) ใน C++

    ห้องสี่เหลี่ยมจัตุรัสมีกระจก 4 ด้าน ที่มุม 3 มุม (ยกเว้นมุมตะวันตกเฉียงใต้) มีเซ็นเซอร์หมายเลข 0, 1, 2 เลเซอร์ออกจากมุมตะวันตกเฉียงใต้ ชนผนังตะวันออกที่ห่างจากเซ็นเซอร์ 0 ระยะ q ห้องกว้าง p หาว่าเลเซอร์จะชนเซ็นเซอร์ไหนก่อน ตัวอย่าง p = 2, q = 1 → Output: 2 แนวทางแก้ปัญหา (คณิตศาสตร์) ลด p และ q

  15. แปลงตัวอักษรในสตริงเป็นตัวพิมพ์เล็ก/ใหญ่สลับกันใน C++

    เราได้รับสตริง งานคือการแปลงตัวอักษรพิมพ์ใหญ่เป็นพิมพ์เล็ก และพิมพ์เล็กเป็นพิมพ์ใหญ่ ส่วนตัวอักษรพิเศษคงเดิม ตัวอย่าง Input − Welcome To The Site! Output − wELCOME tO tHE sITE! Input − HELLO Output − hello แนวทางการแก้ปัญหา (ใช้ ASCII) A-Z: 65-90, a-z: 97-122 ความต่างคือ 32 วนลูปแต่ละตัวอักษร: ถ้

  16. นับตัวอักษรร่วมในสองสตริงใน C++

    เราได้รับสตริงสองสตริง str1 และ str2 งานคือการนับจำนวนคู่ตัวอักษรที่ตรงกันในตำแหน่งเดียวกัน (str1[i] == str2[i]) ตัวอย่าง Input − str1 = hello, str2 = heoo Output − count: 3 คำอธิบาย − ตำแหน่ง 0:h=h, 1:e=e, 2:l≠o, 3:l≠o, 4:o=o → 3 ตำแหน่งตรง Input − str1 = point, str2 = print Output − count: 4 คำอ

  17. นับหลักคู่และหลักคี่ในจำนวนเต็มใน C++

    เราได้รับจำนวนเต็ม งานคือการนับจำนวนหลักคู่และหลักคี่ และตรวจสอบว่าหลักคู่เกิดขึ้นจำนวนคู่ครั้ง และหลักคี่เกิดขึ้นจำนวนคี่ครั้งหรือไม่ ตัวอย่าง Input − digit = 12345 Output − even: 2, odd: 3 → Yes คำอธิบาย − หลักคู่: 2,4 (2 หลัก = จำนวนคู่) หลักคี่: 1,3,5 (3 หลัก = จำนวนคี่) Input − digit = 44556

  18. นับจำนวนแฟกทอเรียลในช่วงที่กำหนดใน C++

    เราได้รับช่วง start และ end งานคือการนับว่ามีจำนวนแฟกทอเรียล (ค่าของ n!) กี่ค่าที่อยู่ในช่วงนั้น ตัวอย่าง Input − start = 5, end = 600 Output − 3 คำอธิบาย 600) Input − start = 1, end = 100 Output − 5 คำอธิบาย 100) แนวทางการแก้ปัญหา หาแฟกทอเรียลแรกที่ ≥ start โดยคูณทีละ 1, 2, 3... end ใช้ตัวแปร

  19. นับจำนวนหลักของแฟกทอเรียลใน C++

    เราได้รับจำนวนเต็ม งานคือการคำนวณแฟกทอเรียลแล้วนับจำนวนหลักของผลลัพธ์ แฟกทอเรียลคืออะไร? n! = n × (n-1) × ... × 1 โดย 0! = 1! = 1 ตัวอย่าง Input − factorial(6) Output − 3 digits คำอธิบาย − 6! = 720 มี 3 หลัก Input − factorial(12) Output − 9 digits คำอธิบาย − 12! = 479001600 มี 9 หลัก แนวทางการแก

  20. นับจำนวนฟีโบนัชชีในช่วงที่กำหนด O(Log n) และ O(1) space ใน C++

    เราได้รับช่วง start และ end งานคือการนับจำนวนฟีโบนัชชีในช่วงนั้น โดยใช้เวลา O(log n) และพื้นที่ O(1) ลำดับฟีโบนัชชี F₀=0, F₁=1, Fₙ=Fₙ₋₁+Fₙ₋₂ ลำดับ: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89... ตัวอย่าง Input − start = 6, last = 100 Output − 6 คำอธิบาย − ฟีโบนัชชีในช่วง: 8, 13, 21, 34, 55, 89 Input

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