Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. การชำระหนี้ที่เหมาะสมที่สุดใน C++

    สมมติว่ากลุ่มเพื่อนไปเที่ยวกันและบางครั้งก็ยืมเงินกัน เช่น อมิตจ่ายค่าอาหารกลางวันให้บิคราม 10 ดอลลาร์ ต่อมาชاندانให้อมิต 5 ดอลลาร์ค่าแท็กซี่ เราต้องออกแบบโมเดลที่แต่ละธุรกรรมเป็นทูเพิล (x, y, z) หมายถึงคน x ให้คน y จำนวน z ดอลลาร์ สมมติว่าอมิต บิคราม และชاندانคือคนที่ 0, 1, 2 ตามลำดับ ธุรกรรมสามาร

  2. นับการทำซ้ำใน C++

    สมมติว่าเรามีสตริงไม่ว่างสองสตริง s1 และ s2 (สูงสุด 100 ตัวอักษร) และตัวเลขสองตัว n1 และ n2 อยู่ในช่วง 0 ถึง 10^6 สมมติว่าสตริง S1 และ S2 โดยที่ S1=[s1,n1] และ S2=[s2,n2] S = [s,n] 定 nghĩa สตริง S ที่ประกอบด้วย n สตริง s ที่ต่อกัน เช่น [ab, 4] = abababab อีกด้านหนึ่ง เรากำหนดว่าสตริง s1 สามารถได้จา

  3. เข้ารหัสสตริงให้สั้นที่สุดใน C++

    สมมติว่าเรามีสตริงที่ไม่ว่างเปล่า เราต้องเข้ารหัสสตริงนี้ให้ความยาวที่เข้ารหัสเป็นไปได้น้อยที่สุด กติกาการเข้ารหัสคือ k[encoded_string] โดย encoded_string ภายใน [] จะถูกทำซ้ำ k ครั้งพอดี k เป็นจำนวนเต็มบวก และ encoded_string จะไม่ว่างหรือมีช่องว่างเกิน เราสมมติว่าสตริงอินพุตมีแค่ตัวอักษรพิมพ์เล็ก ถ

  4. สตริงย่อยที่เป็นการต่อเนื่องของทุกคำใน C++

    สมมติว่าเรามีสตริง s และรายการคำ words ซึ่งคำทุกคำมีความยาวเท่ากัน เราต้องหาดัชนีเริ่มต้นทั้งหมดของสตริงย่อยใน s ที่เป็นการต่อเนื่องของคำใน words ทุกคำพอดีหนึ่งครั้ง และไม่มีตัวอักษรอื่นแทรกแซง เช่น ถ้าอินพุตคือ barfoothefoobarman และ words = [foo, bar] ผลลัพธ์จะเป็น [0,9] เพราะสตริงย่อยที่เริ่มต้น

  5. The Maze III ใน C++

    สมมติว่ามีเขาวงกตที่มีพื้นที่ว่างและกำแพง และมีลูกบอลอยู่ในเขาวงกต ลูกบอลสามารถเคลื่อนที่ผ่านพื้นที่ว่างได้โดยการกลิ้งขึ้น (u) ลง (d) ซ้าย (l) หรือขวา (r) แต่จะกลิ้งต่อไปจนกว่าจะชนกำแพง เมื่อลูกบอลหยุด มันสามารถเลือกทิศทางถัดไปได้ มีรูในเขาวงกตด้วย ลูกบอลจะตกเข้าไปในรูหากมันกลิ้งผ่านรู ดังนั้น หากเ

  6. จำนวนวิธีทาสีกริด N×3 ใน C++

    สมมติว่าเรามีกริดขนาด n×3 และเราต้องการทาสีทุกเซลล์ของกริดด้วยสีเพียงหนึ่งสีจากสามสี ได้แก่ แดง เหลือง และเขียว มีเงื่อนไขคือ ไม่มีเซลล์ติดกันสองเซลล์ที่มีสีเหมือนกัน เรามี n แถวของกริด สุดท้ายเราต้องหาจำนวนวิธีที่เราสามารถทาสีกริดนี้ได้ คำตอบอาจใหญ่มาก จึงคืนค่าโมดิวโล 10^9 + 7 เช่น ถ้าอินพุตคือ 1

  7. สร้างอาร์เรย์ที่หาค่าสูงสุดได้พอดี K ครั้งใน C++

    สมมติว่าเรามีจำนวนเต็มสามจำนวน n, m, และ k หากเรามีอัลกอริทึมต่อไปนี้เพื่อหาองค์ประกอบสูงสุดของอาร์เรย์จำนวนเต็มบวก: max_val := -1 max_ind := -1 search_cost := 0 n := size of arr for initialize i := 0, when i < n, update (increase i by 1), do: if max_val < arr[i], then: max_val := arr[i

  8. ผลรวมสูงสุดจากต้นไม้ที่ห้ามเลือกระดับติดกันใน C++

    คำอธิบายโค้ด ในที่นี้ เราจะหาผลรวมสูงสุดของโหนดในต้นไม้ โดยที่ผลรวมไม่ควรมีโหนดจากสองระดับที่ติดกันของต้นไม้ ตัวอย่างเพื่อความเข้าใจ: เอาต์พุต 21 คำอธิบาย ถ้าเริ่มจากราก (ระดับ 1) ผลรวม = 5 + 3 + 8 + 1 = 17 ถ้าเริ่มจากลูกของราก (ระดับ 2) ผลรวม = 2 + 6 + 9 + 4 = 21 แนวทางแก้ปัญหา เพื่อหาผลรวมสูงสุด

  9. ผลรวมสูงสุดจากอาร์เรย์สามอาร์เรย์ที่ห้ามเลือกองค์ประกอบติดกันจากอาร์เรย์เดียวกันใน C++

    คำอธิบายปัญหา ในปัญหานี้ เราได้รับอาร์เรย์สามอาร์เรย์ arr1[], arr2[], และ arr3[] ทั้งหมดมีขนาด N งานของเราคือการเขียนโปรแกรมเพื่อหาผลรวมสูงสุดจากอาร์เรย์สามอาร์เรย์ โดยที่ห้ามเลือกองค์ประกอบติดกันจากอาร์เรย์เดียวกัน เราจะหาผลรวมสูงสุดโดยการเลือก N องค์ประกอบ องค์ประกอบที่ i สามารถเลือกได้จาก arr1[i

  10. ผลรวมสูงสุดในกริด 2×n ที่ไม่มีองค์ประกอบติดกันใน C++

    คำอธิบายปัญหา ในปัญหานี้ เราได้รับกริดสี่เหลี่ยมผืนผ้าขนาด 2×n งานของเราคือการเขียนโปรแกรมเพื่อหาผลรวมสูงสุดในกริด 2×n โดยที่ไม่มีองค์ประกอบสองตัวใดๆ ติดกันทั้งในแนวตั้ง แนวนอน และแนวทแยงมุม ตัวอย่างเพื่อความเข้าใจ: อินพุต rectGrid[2][] = {{3, 8, 9, 5}, {4, 1, 2, 7}} เอาต์พุต 13 คำอธิบาย ผลรวมที่เป

  11. ผลรวมสูงสุดในอาร์เรย์วงกลมที่ไม่มีสององค์ประกอบติดกันใน C++

    คำอธิบายปัญหา สำหรับอาร์เรย์วงกลม เราต้องการหาผลรวมสูงสุดขององค์ประกอบในอาร์เรย์ โดยที่องค์ประกอบที่อยู่ติดกันไม่สามารถเลือกได้ กล่าวคือ เราต้องเลือกองค์ประกอบสลับกัน อาร์เรย์วงกลม (Circular Array) เป็นอาร์เรย์ประเภทพิเศษที่องค์ประกอบตัวสุดท้ายเชื่อมต่อกับองค์ประกอบตัวแรก ตัวอย่างเพื่อความเข้าใจ:

  12. Maximum Sum Increasing Subsequence (DP-14) ใน C++

    โจทย์ หา Maximum Sum Increasing Subsequence (MSIS) ของอาร์เรย์ N ตัว คือ subsequence ที่เพิ่มขึ้นและมีผลรวมสูงสุด ตัวอย่าง: arr = {1, 101, 2, 3, 100, 4, 5} → MSIS = {1, 2, 3, 100} Sum = 106 วิธีการแก้ปัญหา (Dynamic Programming) DP[i] = max sum increasing subsequence ที่ลงท้ายที่ index i - เริ่มต้น

  13. Maximum Sum Increasing Subsequence จาก Prefix และต้องรวม Element ที่กำหนดใน C++

    โจทย์ x) ตัวอย่าง: arr = {1, 5, 9, 131, 6, 100, 11, 215}, x=4, y=6 → Subsequence: {1, 5, 9, 11} Sum = 26 วิธีการแก้ปัญหา (DP) วิธี 1: 2D DP DP[i][j] = max sum increasing subsequence จนถึง index i ที่ลงท้ายด้วย arr[j] → คำตอบ = DP[x][y] วิธี 2: 1D DP (มีประสิทธิภาพมากกว่า) - DP[i] = max sum incre

  14. Maximum Sum Increasing Subsequence ด้วย Binary Indexed Tree ใน C++

    โจทย์ กำหนดอาร์เรย์ arr[] ขนาด N หา Maximum Sum Increasing Subsequence (MSIS) ใช้ Binary Indexed Tree (Fenwick Tree) ตัวอย่าง: arr = {4, 1, 9, 2, 3, 7} → MSIS = {1, 2, 3, 7} Sum = 13 วิธีการแก้ปัญหา Coordinate Compression: Map ค่าในอาร์เรย์เป็น index 1..M (เรียง unique values) BIT เก็บ max sum สำ

  15. หาผลรวมความต่างสัมบูรณ์สูงสุดของ Permutation ใดๆ ใน C++

    โจทย์ กำหนดอาร์เรย์ หา permutation ที่ให้ผลรวม |a[i] - a[i+1]| (รวม circular |last - first|) สูงสุด ตัวอย่าง: arr = {9, 1, 6, 3} → Max = 22 (เช่น 9,1,6,3 เรียงใหม่เป็น 3,9,1,6: |3-9|+|9-1|+|1-6|+|6-3| = 6+8+5+3=22) วิธีการแก้ปัญหา (Greedy) เรียงอาร์เรย์จากน้อยไปมาก จัดเรียงใหม่: สลับกันระหว่างค่า

  16. หาผลรวมความต่างสัมบูรณ์ของสมาชิกติดกันสูงสุดใน C++

    โจทย์ กำหนด N หาผลรวม |a[i] - a[i+1]| สูงสุดจากทุก permutation ของ {1, 2, ..., N} ตัวอย่าง: N=4 → Max = 7 (เช่น permutation 2,4,1,3: |2-4|+|4-1|+|3-1| = 2+3+2=7) วิธีการแก้ปัญหา (สูตรปิด) สังเกตรูปแบบ: N=2:1, N=3:3, N=4:7, N=5:11, N=6:17, N=7:23, N=8:31 สูตร: maxSum = (N² - 2) / 2 การนำไปสู่สูตร:

  17. หาผลรวมสูงสุดของจำนวนที่ต่างกันที่ LCM เป็น N ใน C++

    โจทย์ เหมือนโจทย์ก่อนหน้า: กำหนด N หาผลรวมสูงสุดของจำนวนที่ต่างกันซึ่ง LCM เท่ากับ N ตัวอย่าง: N = 12 → ตัวหาร: 1, 2, 3, 4, 6, 12 → Sum = 28 วิธีการแก้ปัญหา หาตัวหารทั้งหมดของ N แล้วบวกกัน (เหมือนโจทย์ก่อนหน้า) ตัวอย่างโค้ด C++ #include <iostream> using namespace std; int calcMaxSumForLCM(

  18. หาผลรวมสูงสุดของจำนวนที่ต่างกันซึ่ง LCM เป็น N ใน C++

    โจทย์ กำหนดจำนวน N หาผลรวมสูงสุดของจำนวนที่ต่างกันซึ่ง LCM (Least Common Multiple) ของพวกมันเท่ากับ N ตัวอย่าง: N = 10 → ตัวประกอบ: 1, 2, 5, 10 → Sum = 18 วิธีการแก้ปัญหา สังเกต: เพื่อให้ LCM = N ต้องเลือกเฉพาะตัวหารของ N เท่านั้น และเพื่อให้ผลรวมสูงสุด → ต้องเลือกตัวหารทั้งหมดของ N อัลกอริทึม: หา

  19. หาผลรวมสูงสุดจากการเลือกสมาชิกแต่ละแถวในเมทริกซ์ใน C++

    โจทย์ ตัวที่เลือกในแถวก่อนหน้า (จากล่างขึ้นบน) ตัวอย่าง: mat = {{4, 6, 1}, {2, 5, 7}, {9, 1, 2}} → เลือกแถว 3: 9, แถว 2: 7 (<9), แถว 1: 6 (<7) → Sum = 22 วิธีการแก้ปัญหา (Greedy) เริ่มจากแถวสุดท้าย (bottom row) หาค่าสูงสุด → เพิ่มใน sum ขึ้นไปแถวก่อนหน้า หาค่าสูงสุดที่ < ค่าที่เลือกไปแล้ว ทำซ้ำจ

  20. Succinct Encoding ของ Binary Tree ใน C++

    แนวคิด Succinct Encoding ของ Binary Tree ใช้พื้นที่ใกล้เคียงกับ theoretical minimum จำนวน binary tree โครงสร้างต่างกัน n โหนด = Catalan number นำไปสู่ ~2n bits สำหรับโครงสร้าง + O(n) bits สำหรับข้อมูล วิธีการ Encoding Preorder traversal: - โหนดมีอยู่ → เขียน 1 ใน structure list, เขียน value ใน data

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:194/301  20-คอมพิวเตอร์/Page Goto:1 188 189 190 191 192 193 194 195 196 197 198 199 200