Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. หา Permutation ที่มีดัชนี i ทำให้ gcd(p[i], i) > 1 จำนวน K ตัวใน C++

    โจทย์ ให้ N และ K ต้องการหา Permutation ของ 1..N ที่มีดัชนี i (1-based) ทำให้ gcd(P[i], i) > 1 จำนวนพอดี K ตัว ตัวอย่าง: N=4, K=3 → [1,2,3,4] เพราะ gcd(1,1)=1, gcd(2,2)=2, gcd(3,3)=3, gcd(4,4)=4 → มี 3 ตัว ข้อสังเกตสำคัญ gcd(i, i+1) = 1, gcd(1, i) = 1, gcd(i, i) = i Permutation P[i]=i ให้ K = N

  2. หาค่า x สูงสุดที่ทำให้ n! หาร k^x ลงตัวใน C++

    โจทย์ ให้จำนวนเต็ม n และ k ต้องการหาค่า x สูงสุดที่ทำให้ n! mod (k^x) = 0 ตัวอย่าง: n=5, k=2 → 5! = 120, 120 mod 2³ = 0, 120 mod 2⁴ = 8 → x = 3 วิธีแก้ปัญหา (Legendres Formula + Factorization) แยกเฉพาะตัวประกอบของ k สำหรับแต่ละเฉพาะตัว p^v ใน k หาเลขชี้กำลังของ p ใน n! (Legendre: n/p + n/p² + ...)

  3. หาเวลาที่เข็มนาฬิกาสร้างมุมที่กำหนด (Theta) ใน C++

    โจทย์ ให้มุม Theta (องศา) ต้องการหาเวลาแบบ hh:mm ที่เข็มนาทีและเข็มชั่วโมงสร้างมุมเท่ากับ Theta ตัวอย่าง: Theta = 90° → เวลา 3:00 วิธีแก้ปัญหา (Brute Force) ลูปทุกเวลาเป็นไปได้ (12 ชั่วโมง x 60 นาที = 720 กรณี): คำนวณมุมเข็มชั่วโมง: 0.5 * (hour*60 + minute) คำนวณมุมเข็มนาที: 6 * minute มุมระหว่างเ

  4. หาผลรวมแนวตั้งสูงสุดในต้นไม้ไบนารีใน C++

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

  5. หาการจัดเรียงทั้งหมดของตัวเลข k-bit ที่มี n บิตเซต โดย 1 <= n <= k เรียงลำดับใน C++

    สมมติว่ามีตัวเลข k หาการจัดเรียงที่เป็นไปได้ทั้งหมดของตัวเลข k-bit ที่มี n บิตเซต (Set bits) โดยที่ 1 <= n <= k ผลลัพธ์เราจะพิมพ์ตัวเลขทั้งหมดที่มีบิตเซต 1 ตัวก่อน ตามด้วยตัวเลขที่มีบิตเซต 2 ตัว จนถึงตัวเลขที่บิตทั้งหมดเป็นเซต หากตัวเลขสองตัวมีจำนวนบิตเซตเท่ากัน ตัวเลขที่เล็กกว่าจะมาก่อน ดังนั

  6. หาพื้นที่น้อยที่สุดของสี่เหลี่ยมผืนผ้าจากชุดพิกัดที่กำหนดใน C++

    สมมติว่ามีอาร์เรย์ของจุดบนระนาบ XY เราต้องหาพื้นที่น้อยที่สุดของสี่เหลี่ยมผืนผ้าที่สามารถสร้างได้จากจุดเหล่านี้ ด้านของสี่เหลี่ยมผืนผ้าควรขนานกับแกน X และ Y หากเราไม่สามารถสร้างสี่เหลี่ยมผืนผ้าได้ ให้คืนค่า 0 ดังนั้นถ้าอาร์เรย์จุดเป็น [(1, 1), (1, 3), (3, 1), (3, 3), (2, 2)] ผลลัพธ์จะเป็น 4 สี่เหลี่

  7. หาต้นทุนน้อยที่สุดในการซื้อหนังสือทั้งหมดใน C++

    สมมติว่ามีอาร์เรย์ n องค์ประกอบ นี่คือคะแนน (Ratings) ของพวกเขา หาต้นทุนน้อยที่สุดในการซื้อหนังสือทั้งหมด ภายใต้เงื่อนไขดังนี้: ต้นทุนของหนังสือแต่ละเล่มจะต้องมีอย่างน้อย 1 ดอลลาร์ หนังสือที่มีคะแนนสูงกว่าจะมีต้นทุนมากกว่าหนังสือที่อยู่ติดกัน (ซ้ายหรือขวา) ดังนั้นตัวอย่างเช่น ถ้าอาร์เรย์คะแนนเป็น

  8. หาองค์ประกอบทั้งหมดในอาร์เรย์ที่มีองค์ประกอบมากกว่าอย่างน้อยสองตัวใน C++

    สมมติว่ามีอาร์เรย์ของตัวเลข n ตัว เราต้องหาองค์ประกอบทั้งหมดในอาร์เรย์ ซึ่งมีองค์ประกอบที่มากกว่ามันอย่างน้อยสองตัว ถ้าอาร์เรย์เป็น A = [2, 8, 7, 1, 5] ผลลัพธ์จะเป็น [2, 1, 5] เพื่อแก้ปัญหานี้ เราจะหาองค์ประกอบที่มากเป็นอันดับสอง (Second Maximum) แล้วพิมพ์องค์ประกอบทั้งหมดที่น้อยกว่าหรือเท่ากับค่าอั

  9. หาการเลื่อนขั้นต่ำสำหรับคำนำหน้าร่วมยาวที่สุดใน C++

    พิจารณาว่ามีสตริงสองตัว A และ B ความยาวของ A และ B เท่ากัน ในการเลื่อน (Shift) หนึ่งครั้ง เราสามารถหมุนสตริง B หนึ่งองค์ประกอบ เราต้องหาการเลื่อนขั้นต่ำที่จำเป็นเพื่อให้ได้คำนำหน้าร่วม (Common Prefix) ยาวที่สุดจาก A และ B ดังนั้นถ้า A = computerprogramming และ B = programminglanguage การเลื่อนขั้นต่

  10. นับจำนวน Almost Prime จาก 1 ถึง N ใน C++

    สมมติว่ามีตัวเลข N เราต้องหาจำนวนเฉพาะเกือบ (Almost Prime) ในช่วง 1 ถึง N ตัวเลขจะเรียกว่า Almost Prime เมื่อมันมีตัวประกอบเฉพาะ (Prime Factors) ที่แตกต่างกันพอดีสองตัว ตัวเลขอาจมีตัวประกอบไม่ใช่เฉพาะได้เท่าไหร่ก็ได้ แต่ควรจะมีตัวประกอบเฉพาะสองตัว ดังนั้นถ้า N คือ 2 ผลลัพธ์จะเป็น 2 มีสองตัวเลขคือ 6

  11. หาผลรวมน้อยที่สุด ที่ทุก 3 ตัวติดกันต้องมีอย่างน้อย 1 ตัวใน C++

    สมมติว่ามีอาร์เรย์ n องค์ประกอบ งานคือการหาผลรวมน้อยที่สุดขององค์ประกอบจากอาร์เรย์ ซึ่งอย่างน้อยหนึ่งองค์ประกอบถูกเลือกจากทุกสามองค์ประกอบติดกันในอาร์เรย์นั้น ดังนั้นถ้าอาร์เรย์เป็น [1, 2, 3, 6, 7, 1] ผลลัพธ์คือ 4 ถ้าเราเลือก 3 และ 1 แล้ว (3 + 1 = 4) มีสับอาร์เรย์ติดกันบางส่วน เช่น [1, 2, 3], [2, 3,

  12. หาค่าซ้ำในอาร์เรย์ที่กำหนดเมื่อองค์ประกอบไม่จำกัดช่วงใน C++

    สมมติว่ามีอาร์เรย์ของจำนวนเต็ม N ตัว ที่นี่เราจะพิมพ์ค่าซ้ำของอาร์เรย์ที่กำหนด หากไม่มีค่าซ้ำ ให้คืนค่า -1 ดังนั้นถ้าอาร์เรย์เป็น [12, 15, 12, 3, 6, 12, 3, 48, 56, 8, 48] ค่าซ้ำคือ [12, 3, 48] ที่นี่เราจะใช้ unordered map ใน C++ ดังนั้นตอนแรกเมื่อเอาองค์ประกอบหนึ่ง ตรวจสอบว่ามันมีอยู่ใน map หรือไม่

  13. หาค่าน้อยที่สุดที่กำหนดให้ทุกองค์ประกอบอาร์เรย์ ให้ผลคูณอาร์เรย์มากกว่าเดิมใน C++

    สมมติว่ามีอาร์เรย์ n องค์ประกอบ อัปเดตทุกองค์ประกอบของอาร์เรย์ที่กำหนดให้เป็นค่า x ต่ำสุด ซึ่ง arr[i] = x ซึ่งผลคูณของทุกองค์ประกอบในอาร์เรย์ใหม่จะมากกว่าผลคูณของทุกองค์ประกอบของอาร์เรย์เริ่มต้นอย่างเคร่งครัด โดยที่ i <= arr[i] <= 10^10 และ 1 <= n <= 10^5 ดังนั้นถ้าอาร์เรย์เป็น [4, 2, 1,

  14. หาค่าซ้ำในอาร์เรย์คงที่ที่มีองค์ประกอบ 0 ถึง N-1 ในพื้นที่ O(1) ใน C++

    สมมติว่ามีรายการตัวเลขจาก 0 ถึง n-1 ตัวเลขอาจซ้ำได้หลายครั้ง เราต้องหาตัวเลขที่ซ้ำโดยไม่ใช้พื้นที่เพิ่มเติม ถ้าค่า n = 7 และรายการเป็น [5, 2, 3, 5, 1, 6, 2, 3, 4, 5] คำตอบจะเป็น 5, 2, 3 เพื่อแก้ปัญหานี้ เราต้องทำตามขั้นตอนเหล่านี้: สำหรับแต่ละองค์ประกอบ e ในรายการ ทำขั้นตอนต่อไปนี้ sign := A[ค่าสั

  15. หาตัวเลขที่หายไปในอีกอาร์เรย์หนึ่งซึ่งเป็นสำเนาที่สับเปลี่ยนใน C++

    สมมติว่ามีอาร์เรย์สองอาร์เรย์ A และ B อาร์เรย์ A มี n องค์ประกอบ อาร์เรย์ที่สอง B มีองค์ประกอบทั้งหมดของ A แต่ถูกสับเปลี่ยน (Shuffled) และเอาออกไปหนึ่งองค์ประกอบ เราต้องหาองค์ประกอบที่หายไป ดังนั้นถ้า A = [4, 8, 1, 3, 7] และ B = [7, 4, 3, 1] ผลลัพธ์คือ 8 สิ่งนี้สามารถแก้ได้โดยใช้เทคนิค XOR การเกิดร่

  16. หาชุด m องค์ประกอบ ที่ความต่างระหว่างสองตัวใดๆ หาร k ลงตัวใน C++

    สมมติว่ามีอาร์เรย์ที่มีจำนวนเต็มบวก N ตัว และตัวแปร K อีกตัว เราต้องหาองค์ประกอบ m ตัวที่แน่นอน ซึ่งความต่างระหว่างองค์ประกอบใดๆ สองตัว หาร k ลงตัว ดังนั้นถ้าอาร์เรย์ A = [4, 7, 10, 6, 9] และ k = 3 และ m = 3 ผลลัพธ์จะเป็น yes เนื่องจากเราสามารถหาสามองค์ประกอบได้คือ 4, 7, 10 เพื่อแก้ปัญหานี้ เราต้องต

  17. หาจุดเท้าของเส้นตั้งฉากจากจุดในระนาบ 2D ไปยังเส้นตรงใน C++

    พิจารณาว่ามีจุด P ในระนาบ 2D และสมการของเส้นตรง งานคือการหาจุดเท้า (Foot of Perpendicular) จาก P ไปยังเส้นตรง สมการของเส้นตรงคือ ax + by + c = 0 สมการของเส้นผ่าน P และตั้งฉากกับเส้น สมการของเส้นผ่าน P และ Q จะเป็น ay – bx + d = 0 นอกจากนี้ P(x1, y1), และ Q(x2, y2) ดังนั้นเราแทนพิกัดของ P ลงในสมการ a

  18. หาตัวอักษรดัชนี i ในสตริงไบนารีหลังจาก n รอบการทำซ้ำใน C++

    สมมติว่ามีสตริงไบนารี bin จากนั้นนำไปทำ n รอบ และในแต่ละรอบ 0 จะกลายเป็น 01 และ 1 จะกลายเป็น 10 หลังจากนั้น หาตัวอักษรดัชนี i ในสตริงหลังรอบที่ n ดังนั้นถ้าสตริงไบนารีคือ 101 และ n = 2 และ i = 3 หลังรอบแรกจะเป็น 100110 ในรอบถัดไป จะเป็น 100101101001 ดังนั้นดัชนี i กำลังถือ 1 เพื่อแก้ปัญหานี้ เราต้อง

  19. หาตัวเลข n น้อยที่สุด ที่ n XOR n+1 เท่ากับ k ที่กำหนดใน C++

    สมมติว่ามีจำนวนบวก k เราต้องหาจำนวนบวก n ซึ่ง XOR ของ n และ n+1 เท่ากับ k ดังนั้นถ้า k = 7 (111) ผลลัพธ์จะเป็น 3 เพราะ 3 (011) และ 3 + 1 = 4 (100) ดังนั้น 011 XOR 100 = 111 (7) มีสองกรณีที่เป็นไปได้ พิจารณา n เป็นคู่ บิตสุดท้ายของ n = 0 บิตสุดท้ายของ n + 1 = 1 บิตอื่นๆ เหมือนกัน ดังนั้น XOR จะเป็น 1

  20. หาดัชนีของวงเล็บปิดสำหรับวงเล็บเปิดที่กำหนดในนิพจน์ใน C++

    พิจารณาว่ามีนิพจน์ที่มีวงเล็บ หากดัชนีของวงเล็บเปิดหนึ่งตัวถูกกำหนด เราต้องหาวงเล็บปิดของมัน ดังนั้นถ้านิพจน์เป็นแบบ: (25*6+(88-32+(50/10)+20)) และดัชนีของวงเล็บเปิดคือ 6 วงเล็บปิดจะอยู่ที่ตำแหน่ง 23 ที่นี่เราจะใช้โครงสร้างข้อมูล Stack (กอง) เพื่อแก้ปัญหานี้ เราจะเดินทางผ่านนิพจน์จากดัชนีที่กำหนด แล

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:101/301  20-คอมพิวเตอร์/Page Goto:1 95 96 97 98 99 100 101 102 103 104 105 106 107