Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. หาคู่ (x, y) ที่แตกต่างกันในช่วงที่กำหนด ทำให้ x หาร y ลงตัว C++

    ปัญหา หาคู่ (x, y) ที่ l ≤ x, y ≤ r และ x หาร y ลงตัว (y % x == 0) ถ้ามีหลายคู่เลือกได้แค่คู่เดียว ตัวอย่าง: l = 3, r = 6 คู่ที่ได้คือ (3, 6) วิธีแก้ปัญหา O(1) สังเกตว่าคู่ที่เล็กที่สุดที่เป็นไปได้คือ (l, 2l) เพราะ: อัตราส่วน y/x ที่น้อยที่สุดคือ 2 ถ้า 2l ≤ r คู่ (l, 2l) จะอยู่ในช่วงเสมอ ถ้าเพิ่ม

  2. หาจุดคงที่ (ค่าเท่ากับดัชนี) ในอาร์เรย์ที่จัดเรียงแล้ว C++

    ปัญหา หาจุดคงที่ในอาร์เรย์ที่จัดเรียงแล้ว (ไม่มีค่าซ้ำ) โดยจุดคงที่คือสมาชิกที่ค่าเท่ากับดัชนีของมัน ตัวอย่าง: arr = [-10, -1, 0, 3, 10, 11, 9, 50, 56] จุดคงที่คือ 3 (arr[3] = 3) วิธีแก้ปัญหา: Binary Search มาตรฐาน เนื่องจากอาร์เรย์จัดเรียงแล้วและไม่มีค่าซ้ำ ใช้ Binary Search ธรรมดา: ถ้า mid == ar

  3. หาจุดคงที่ในอาร์เรย์ที่อนุญาตให้มีค่าซ้ำ C++

    ปัญหา หาจุดคงที่ (Fixed Point) ในอาร์เรย์ที่จัดเรียงแล้ว โดยจุดคงที่คือสมาชิกที่มีค่าเท่ากับดัชนี (index) ของมัน อาร์เรย์อาจมีค่าลบและอนุญาตให้มีค่าซ้ำได้ ตัวอย่าง: arr = [-10, -5, 2, 2, 2, 3, 4, 7, 10, 12, 17] จุดคงที่คือ 2 (arr[2] = 2) วิธีแก้ปัญหา: Binary Search แบบปรับเปลี่ยน Binary Search ปกติ

  4. หาตัวเลข x ที่ผลรวมของ x และผลรวมหลักของ x เท่ากับ n ใน C++

    ปัญหา ให้ตัวเลข n ต้องการหาตัวเลข x ที่ทำให้ x + ผลรวมหลักของ x = n ตัวอย่าง: n = 21 คำตอบคือ x = 15 เพราะ 15 + (1 + 5) = 21 วิธีแก้ปัญหา ใช้วิธีตรวจสอบทีละตัว (Brute Force) ตั้งแต่ 1 ถึง n: วนลูป i จาก 1 ถึง n คำนวณผลรวมหลักของ i ถ้า i + digitSum(i) == n คืนค่า i ถ้าไม่พบ คืนค่า -1 ตัวอย่างโค้ด

  5. หาคู่สมาชิกที่สลับกันแล้วทำให้ผลรวมของสองอาร์เรย์เท่ากัน C++

    ปัญหา ให้สองอาร์เรย์ A และ B ที่มีจำนวนสมาชิกต่างกัน ต้องการหาคู่ (x, y) โดย x อยู่ใน A และ y อยู่ใน B ที่เมื่อสลับค่าทั้งสองแล้ว ผลรวมของทั้งสองอาร์เรย์จะเท่ากัน ตัวอย่าง: A = [4, 1, 2, 2, 1, 1] (ผลรวม = 11), B = [3, 3, 6, 3] (ผลรวม = 15)คู่ที่ต้องการคือ (1, 3) หลังสลับ: A = [4, 3, 2, 2, 1, 1] (ผลร

  6. หาคู่ตัวเลขที่ให้ผลคูณมากที่สุดในอาร์เรย์จำนวนเต็ม C++

    ปัญหา ให้อาร์เรย์ A ที่มี n สมาชิก ต้องการหาคู่ (x, y) ที่ให้ผลคูณ x*y มากที่สุด อาร์เรย์อาจมีทั้งจำนวนบวกและลบ ตัวอย่าง: A = [-1, -4, -3, 0, 2, -5] คู่ที่ให้ผลคูณมากที่สุดคือ (-4, -5) เพราะ -4 × -5 = 20 วิธีแก้ปัญหา ติดตามค่า 4 ตัวสำคัญ: positive_max: ค่าบวกมากที่สุด positive_second_max: ค่าบวกมา

  7. หาคู่ของตัวเลขที่มีความต่างเท่ากับค่าที่กำหนดใน C++

    ปัญหา ให้อาร์เรย์ A ที่มี n สมาชิกที่แตกต่างกัน ต้องการหาคู่ (x, y) จากอาร์เรย์ A ที่ทำให้ความต่างระหว่าง x และ y เท่ากับค่าความต่าง d ที่กำหนดไว้ ตัวอย่าง: A = [10, 15, 26, 30, 40, 70] และ d = 30 คู่ที่ได้คือ (10, 40) และ (30, 70) วิธีแก้ปัญหา สมมติว่าอาร์เรย์ได้รับการจัดเรียงแล้ว ใช้เทคนิค Two Po

  8. หาจุดที่ทำให้ผลรวมระยะทางแมนฮัตตัน (Manhattan Distance) น้อยที่สุดใน C++

    สมมติว่าเรามี n จุดที่แตกต่างกันในพื้นที่ K มิติ (K-dimensional Space) ค่าของ n อยู่ในช่วง (2, 10^5) และค่าของ k อยู่ในช่วง (1 ถึง 5) เราต้องกำหนดจุดที่ทำให้ผลรวมของระยะทางแมนฮัตตัน (Manhattan Distance) จากจุดผลลัพธ์ไปยัง n จุดนั้นน้อยที่สุด ระยะทางแมนฮัตตันระหว่างจุดสองจุด P1(x1, y1) และ P2(x2, y2

  9. หาเซตย่อยที่มีค่าเฉลี่ยเรขาคณิต (Geometric Mean) สูงสุดใน C++

    ที่นี่เรามีอาร์เรย์ A ที่มีสมาชิกบางส่วน ภารกิจของเราคือหาเซตย่อย (Subset) ที่ค่าเฉลี่ยเรขาคณิตสูงสุด สมมติ A = [1, 5, 7, 2, 0] เซตย่อยที่มีค่าเฉลี่ยเรขาคณิตสูงสุดจะเป็น [5, 7] เพื่อแก้ปัญหานี้ เราจะใช้เทคนิคหนึ่ง เราจะไม่หาค่าเฉลี่ย เพราะเรารู้ว่าสมาชิกสองตัวที่ใหญ่ที่สุดจะให้ค่าเฉลี่ยเรขาคณิตสูงส

  10. หาเมทริกซ์สมมาตร (Symmetric Matrix) ระดับ N ที่มีจำนวนเต็ม 0 ถึง N-1 และเส้นทแยงหลักเป็น 0 ด้วย C++

    ข้อความโจทย์ ที่นี่เราจะดูวิธีสร้างเมทริกซ์สมมาตร (Symmetric Matrix) ระดับ N และสมาชิกของแต่ละแถวจะมีตัวเลขจาก 0 ถึง N-1 สมาชิกบนเส้นทแยงมุมจะเป็น 0 เสมอ งานนี้ง่าย เราจะสร้างเมทริกซ์ N x N แล้วสำหรับแต่ละแถว i และคอลัมน์ j ถ้า i และ j เหมือนกัน ให้ทำเครื่องหมายเป็น 0 มิฉะนั้น เพิ่มตัวนับจาก 1 ถึง

  11. หาต้นไม้ย่อยซ้ำ (Duplicate Subtrees) ทั้งหมดใน C++

    ข้อความโจทย์ พิจารณาว่าเรามีต้นไม้แบบทวิภาค (Binary Tree) เราต้องหาว่ามีต้นไม้ย่อยซ้ำ (Duplicate Subtrees) ในต้นไม้หรือไม่ สมมติเรามีต้นไม้แบบทวิภาคดังนี้ - มีต้นไม้ย่อยเหมือนกันสองต้นขนาด 2 ในแต่ละต้นไม้ย่อย D, BD และ BE ก็เป็นต้นไม้ย่อยซ้ำเช่นกัน เราสามารถแก้ปัญหานี้ได้โดยใช้การทำซีเรียลไลซ์ต้นไม

  12. หาจำนวนแฟกทอเรียลทั้งหมดที่น้อยกว่าหรือเท่ากับ n ใน C++

    ที่นี่เราจะดูวิธีพิมพ์จำนวนแฟกทอเรียล (Factorial Numbers) ทั้งหมดที่น้อยกว่าหรือเท่ากับ n จำนวน N ถูกเรียกว่าจำนวนแฟกทอเรียลหากมันเป็นแฟกทอเรียลของจำนวนบวก ดังนั้นจำนวนแฟกทอเรียลบางตัวคือ 1, 2, 6, 24, 120 เพื่อพิมพ์จำนวนแฟกทอเรียล เราไม่จำเป็นต้องหาแฟกทอเรียลโดยตรง เริ่มจาก i = 1 พิมพ์ factorial*i

  13. หาคู่ (a, b) ในอาร์เรย์ที่ a % b = k ด้วย C++

    ข้อความโจทย์ สมมติว่าเรามีอาร์เรย์ A จากอาร์เรย์นั้น เราต้องหาคู่ทั้งหมด (a, b) ที่ทำให้ a % b = k สมมติอาร์เรย์คือ A = [2, 3, 4, 5, 7] และ k = 3 คู่คือ (7, 4), (3, 4), (3, 5), (3, 7) เพื่อแก้ปัญหานี้ เราจะท่องรายการและตรวจสอบว่าเงื่อนไขที่กำหนดเป็นจริงหรือไม่ ตัวอย่างโค้ด #include <iostream>

  14. หาคู่ (a,b) และ (c,d) ในอาร์เรย์ที่ทำให้ ab = cd ด้วย C++

    ข้อความโจทย์ สมมติว่าเรามีอาร์เรย์ A จากอาร์เรย์นั้น เราต้องเลือกสองคู่ (a, b) และ (c, d) ที่ทำให้ ab = cd ให้อาร์เรย์ A = [3, 4, 7, 1, 2, 9, 8] คู่ที่ได้คือ (4, 2) และ (1, 8) เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ - สำหรับ i := 0 ถึง n-1 ทำ สำหรับ j := i + 1 ถึง n-1 ทำ หาผลคูณ = arr[i] * ar

  15. หาปริมาณน้ำที่ต้องเติมเพื่อให้ได้อัตราส่วนเป้าหมายในสารละลายด้วย C++

    สมมติว่าเรามีภาชนะขนาด X มีสารละลายของน้ำและของเหลวอื่น สารละลายมีน้ำ W% เราต้องหาว่าต้องเติมน้ำเท่าไรเพื่อเพิ่มอัตราส่วนน้ำเป็น Y%? ถ้า X = 125, W = 20 และ Y = 25 ผลลัพธ์จะเป็น 8.33 ลิตร สมมติเราต้องเติมน้ำปริมาณ A เข้ากับสารละลายเดิม ดังนั้นปริมาณใหม่จะเป็น X + A ปริมาณน้ำในสารละลายจะปฏิบัติตามสู

  16. เติมค่าเส้นทแยงมุมเพื่อให้ผลรวมแถว คอลัมน์ และเส้นทแยงเท่ากันในเมทริกซ์ 3x3 ด้วย C++

    สมมติว่าเรามีเมทริกซ์ 3x3 หนึ่ง ซึ่งสมาชิกบนเส้นทแยงมุมว่างอยู่ตอนแรก เราต้องเติมค่าเส้นทแยงมุม ให้ผลรวมของแถว คอลัมน์ และเส้นทแยงมุมเท่ากัน สมมติเมทริกซ์เป็นดังนี้ - หลังจากเติมแล้ว จะเป็น - สมมติสมาชิกเส้นทแยงมุมคือ x, y, z ค่าจะเป็น - x = (M[2, 3] + M[3, 2]) / 2 z = (M[1, 2] + M[2, 1]) / 2 y =

  17. หาจำนวน x ที่ผลรวมของ x และหลักตัวเลขของมันเท่ากับ n ที่กำหนดด้วย C++

    ที่นี่เราจะดูปัญหาหนึ่ง ที่เรารับจำนวน n เราต้องหาค่าอีกตัวหนึ่งคือ x ที่ทำให้ x + ผลรวมหลักตัวเลขของ x เท่ากับ n ที่กำหนด สมมติค่าของ n คือ 21 โปรแกรมนี้จะคืนค่า x = 15 เนื่องจาก 15 + ผลรวมหลักของ 15 คือ 15 + 1 + 5 = 21 = n เพื่อแก้ปัญหานี้ เราต้องทำตามวิธีง่ายๆ เราจะวนลูปจาก 1 ถึง n ในแต่ละรอบ เร

  18. หาสมาชิกในอาร์เรย์ที่ทุกสมาชิกหารด้วยมันลงตัวด้วย C++

    พิจารณาว่าเรามีอาร์เรย์ A ที่มีสมาชิกบางตัว เราต้องหาสมาชิกจาก A ที่ทำให้สมาชิกทั้งหมดสามารถหารด้วยมันลงตัว สมมติ A เป็น [15, 21, 69, 33, 3, 72, 81] สมาชิกจะเป็น 3 เนื่องจากทุกตัวเลขหาร 3 ลงตัว เพื่อแก้ปัญหานี้ เราจะเอาตัวเลขที่น้อยที่สุดใน A แล้วตรวจสอบว่าทุกตัวเลขหารด้วยตัวเลขที่น้อยที่สุดลงตัวหร

  19. หาสมาชิกในอาร์เรย์ที่ผลรวมด้านซ้ายเท่ากับผลรวมด้านขวาด้วย C++

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

  20. หาจุดเท่ากัน (Equal Point) ในสตริงวงเล็บด้วย C++

    ที่นี่เราจะดูวิธีหาจุดเท่ากัน (Equal Point) ในสตริงของวงเล็บ จุดเท่ากันคือดัชนี i ที่ทำให้จำนวนวงเล็บเปิด (Opening Brackets) ก่อนหน้ามันเท่ากับจำนวนวงเล็บปิด (Closing Brackets) หลังจากมัน สมมติสตริงวงเล็บเป็น (()))(()()()))) ถ้าเราดูอย่างใกล้ชิด เราสามารถได้ ดังนั้น จำนวนวงเล็บเปิดจาก 0 ถึง 9 คือ 5

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:87/301  20-คอมพิวเตอร์/Page Goto:1 81 82 83 84 85 86 87 88 89 90 91 92 93