Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. หาผลรวมของสัมประสิทธิ์ทวินามที่มีดัชนีคู่ใน C++

    พิจารณาว่ามีตัวเลข n เราต้องหาผลรวมของสัมประสิทธิ์ทวินาม (Binomial Coefficients) ที่มีดัชนีคู่ เช่น $$\left(\begin{array}{c}n\\ 0\end{array}\right)+\left(\begin{array}{c}n\\ 2\end{array}\right)+\left(\begin{array}{c}n\\ 4\end{array}\right)+\left(\begin{array}{c}n\\ 6\end{array}\right)+...\left(\begi

  2. หาบิตที่ k ในสตริงไบนารีที่สร้างจากการกลับและต่อท้ายซ้ำๆ ใน C++

    สมมติว่ามีสตริงไบนารี s เริ่มต้นเป็น 0 ตอนนี้ในแต่ละรอบ ให้กลับบิต (Invert) และต่อท้าย (Append) ดังนั้นหลังรอบที่ n เราจะหาบิตที่ k สมมติว่าจำนวนรอบคือ 4 และ k = 7 ดังนั้นจะเป็น: IterationValue (Initially 0) 101 20110 301101001 40110100110010110 ดังนั้นบิตที่ 7 คือ 1 ในแต่ละรอบ หาคอมพลีเมนต์ (

  3. หาผลรวมขององค์ประกอบที่ไม่ซ้ำ (Distinct) ในอาร์เรย์ใน C++

    พิจารณาว่ามีอาร์เรย์ A ที่มีองค์ประกอบบ้าง เราต้องหาผลรวมขององค์ประกอบที่แตกต่างกันทั้งหมดในอาร์เรย์ ดังนั้นถ้า A = [5, 12, 63, 5, 33, 47, 12, 63] ผลรวมขององค์ประกอบที่แตกต่างกันคือ 160 องค์ประกอบซ้ำจะถูกละเว้นหลังจากพิจารณาครั้งแรกแล้ว เราสามารถใช้ unordered set เพื่อแก้ปัญหานี้ได้อย่างมีประสิทธิภา

  4. หาความยาวรอบของค่าทศนิยม 1/n ใน C++

    สมมติว่ามีตัวเลข n เราต้องหาความยาวของรอบ (Period) ในค่าทศนิยมของ 1/n ดังนั้นถ้าค่า n เป็น 7 แล้ว 1/7 = 0.142857142857… ส่วนที่ตัวหนาคือส่วนที่ซ้ำ ดังนั้นความยาวของรอบคือ 6 สำหรับตัวเลข n อาจมีเศษที่แตกต่างกันได้ n ค่าในผลลัพธ์ แต่วงจรอาจไม่เริ่มจากเศษแรก เพราะเศษบางส่วนในตอนแรกไม่ซ้ำ ดังนั้นเราต้อง

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

    สมมติว่ามีอาร์เรย์ n องค์ประกอบ หาผลรวมสูงสุดที่เป็นไปได้ของทุกองค์ประกอบ โดยที่ทุกองค์ประกอบเท่ากัน การดำเนินการที่อนุญาตคือเลือกองค์ประกอบสองตัว และแทนที่ตัวที่มากกว่าด้วยความต่างสัมบูรณ์ของสองตัว สมมติว่าองค์ประกอบคือ [9, 12, 3, 6] ผลลัพธ์จะเป็น 12 ตอนแรกแทนที่ A[1] ด้วย A[1] – A[3] = 12 – 6 = 6

  6. หาผลรวมสูงสุดของสับอาร์เรย์เพิ่มขึ้นอย่างเคร่งครัดใน C++

    สมมติว่ามีอาร์เรย์ของจำนวนเต็ม n ตัว หาผลรวมสูงสุดของสับอาร์เรย์ที่เพิ่มขึ้นอย่างเคร่งครัด (Strictly Increasing) ดังนั้นถ้าอาร์เรย์เป็น [1, 2, 3, 2, 5, 1, 7] ผลรวมคือ 8 ในอาร์เรย์นี้มีสับอาร์เรย์เพิ่มขึ้นอย่างเคร่งครัด 3 ชุด คือ {1, 2, 3}, {2, 5} และ {1, 7} สับอาร์เรย์ที่มีผลรวมมากที่สุดคือ {1, 7} เ

  7. รังสีสุดท้ายของแต่ละสถานีรังสีในโปรแกรม C++

    สมมติว่ามีสถานี N สถานีในเส้นตรง แต่ละตัวมีกำลังรังสีเท่ากันและไม่ติดลบ ทุกสถานีสามารถเพิ่มกำลังรังสีของสถานีข้างเคียงได้ในลักษณะดังนี้ สมมติว่าสถานี i ที่มีกำลังรังสี R จะเพิ่มกำลังรังสีของสถานี (i – 1) ขึ้น R-1, สถานี (i - 2) ขึ้น R-2 และเพิ่มสถานี (i + 1) ขึ้น R-1, สถานี (i + 2) ขึ้น R-2 ไปเรื่อย

  8. หาปริมาตรสูงสุดของทรงสี่เหลี่ยมจากเส้นรอบรูปและพื้นที่ผิวที่กำหนดใน C++

    สมมติว่ามีพื้นที่ A และเส้นรอบรูป P ตอนนี้เราต้องหาว่าปริมาตรสูงสุดที่สามารถสร้างได้ในรูปทรงสี่เหลี่ยมมุมฉาก (Cuboid) จากเส้นรอบรูปและพื้นที่ผิวที่กำหนดคือเท่าไร ดังนั้นเมื่อ P คือ 24 และ A คือ 24 ผลลัพธ์จะเป็น 8 เรารู้ว่าสำหรับเส้นรอบรูปของทรงสี่เหลี่ยมมุมฉาก P = 4(ความยาว + ความกว้าง + ความสูง) สำ

  9. หาการเคลื่อนที่น้อยที่สุดเพื่อไปถึงเป้าหมายบนเส้นอนันต์ใน C++

    สมมติว่ามีตำแหน่งตัวเลขบนเส้นจำนวนอนันต์ (-inf ถึง +inf) เริ่มจาก 0 เราต้องไปถึงเป้าหมายโดยเคลื่อนที่ตามที่อธิบาย ในการเคลื่อนที่ครั้งที่ i เราสามารถไป i ขั้น ทางซ้ายหรือขวา เราต้องหาจำนวนการเคลื่อนที่น้อยที่สุดที่จำเป็น สมมติว่าเป้าหมายคือ 2 ขั้นตอนขั้นต่ำจะเป็น 3 จาก 0 ถึง 1 จาก 1 ถึง -1 และจาก -1

  10. หาจำนวนค่า Log ขั้นต่ำที่ต้องการเพื่อคำนวณ Log จนถึง N ใน C++

    เรารู้ว่า log(x*y) = log(x) + log(y) เราจะดูว่าต้องการค่า log ขั้นต่ำกี่ค่า เพื่อคำนวณค่า log ทั้งหมดจาก 1 ถึง N ดังนั้นถ้า N คือ 6 ผลลัพธ์จะเป็น 3 เพราะจาก log(1) ถึง log(6) ต้องการค่า log 3 ค่า ไม่รวม log(1) เพราะ log(1) เสมอเป็น 0 แล้วละเว้น ไป log(2) และ log(3) ต้องหาเอง หลังจากนั้น log(4) คือ l

  11. หาจุดเริ่มต้นรอบแรกที่เยี่ยมปั๊มน้ำมันทุกตัวใน C++

    สมมติว่ามีวงกลม และมีปั๊มน้ำมัน n ตัวบนวงกลม เรามีข้อมูลสองชุด: ปริมาณน้ำมันที่แต่ละปั๊มมี ระยะทางจากปั๊มหนึ่งไปอีกปั๊มหนึ่ง คำนวณจุดแรก ที่รถบรรทุกจะสามารถทำวงกลมได้ สมมติว่า 1 ลิตรน้ำมัน รถไปได้ 1 หน่วยระยะทาง สมมติว่ามีปั๊มน้ำมัน 4 ตัว และปริมาณน้ำมัน ระยะทางจากปั๊มถัดไป เป็นดังนี้ [(4, 6), (6,

  12. หาตัวเลขน้อยที่สุดที่ต้องหารเพื่อให้ได้จำนวนกำลังสองสมบูรณ์ใน C++

    โจทย์ ให้จำนวน N ต้องการหาตัวเลขน้อยที่สุดที่หาร N แล้วได้จำนวนกำลังสองสมบูรณ์ (Perfect Square) ตัวอย่าง: N=50 → หาร 2 ได้ 25 (กำลังสอง) → คำตอบ 2 หลักการ จำนวนเป็นกำลังสองสมบูรณ์ ↔ เฉพาะตัวประกอบทุกตัวมีเลขชี้กำลังเป็นเลขคู่ วิธี: หาเฉพาะตัวประกอบของ N และเลขชี้กำลัง → คูณเฉพาะตัวที่มีเลขชี้กำลังค

  13. หาองค์ประกอบน้อยที่สุด 3 อันดับแรกในอาร์เรย์ในโปรแกรม C++

    สมมติว่ามีอาร์เรย์ n องค์ประกอบ เราต้องหาองค์ประกอบน้อยที่สุด อันดับหนึ่ง สอง และสามในอาร์เรย์ องค์ประกอบน้อยที่สุดอันดับหนึ่งคือค่าต่ำสุดของอาร์เรย์ อันดับสองคือค่าต่ำสุดแต่มากกว่าอันดับหนึ่ง และอันดับสามคือค่าต่ำสุดแต่มากกว่าอันดับสอง สแกนผ่านแต่ละองค์ประกอบ ตรวจสอบองค์ประกอบ และเชื่อมโยงเงื่อนไขส

  14. หารัศมีน้อยที่สุด ที่มีจุดอย่างน้อย k จุดอยู่ในวงกลมใน C++

    สมมติว่ามีจุดบางจุด และจำนวนเต็ม k เราต้องหารัศมีน้อยที่สุดของวงกลมที่มีศูนย์กลางอยู่ที่ (0, 0) เพื่อครอบคลุม k จุด ดังนั้นถ้าจุดเป็น (1, 1), (-1, -1), (1, -1) และ k = 3 รัศมีจะเป็น 2 ที่นี่เราจะหาระยะทางยุคลิด (Euclidean Distance) ระหว่างแต่ละจุดกับ (0, 0) เรียงระยะทาง และคืนค่าองค์ประกอบลำดับที่ k

  15. หาขั้นตอนน้อยที่สุดเพื่อไปถึงปลายแมทริกซ์ใน C++

    สมมติว่ามีแมทริกซ์ 2D ที่มีจำนวนเต็มบวก เราต้องหาขั้นตอนน้อยที่สุดที่จำเป็นในการเคลื่อนที่ไปยังปลายของแมทริกซ์ (เซลล์ขวาล่างสุด) หากเราอยู่ที่เซลล์ (i, j) เราสามารถไปที่เซลล์ (i, j+mat[i, j]) หรือ (i+mat[i, j], j) เราไม่สามารถข้ามขอบเขตได้ ดังนั้นถ้าแมทริกซ์เป็นแบบด้านล่าง: 212 111 111 ผลลัพธ์จะ

  16. หาจำนวนธรรมชาติตัวแรกที่แฟกทอเรียลหาร x ลงตัวใน C++

    เราต้องหาจำนวนธรรมชาติตัวแรกที่แฟกทอเรียล (Factorial) หาร x ลงตัว x ถูกกำหนดโดยผู้ใช้ ดังนั้นถ้า x = 16 ผลลัพธ์จะเป็น 6 เพราะ 6! mod 16 = 0 เราจะใช้วิธีทั่วไปในการแก้ปัญหานี้ นับ 1!, 2!, … n! แบบวนซ้ำ และตรวจสอบการหารลงตัวด้วย x หาก modulus เป็น 0 ให้หยุดและคืนค่าตัวเลข ตัวอย่าง #include <iostrea

  17. หาโหนดที่ k ในการท่องแบบแนวตั้งของต้นไม้ไบนารีใน C++

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

  18. หาช่วงที่ใหญ่ที่สุดที่มีจำนวนเต็มที่กำหนด N ตัวเพียงตัวเดียวใน C++

    สมมติว่ามีอาร์เรย์ของจำนวนเต็ม N ตัวที่แตกต่างกัน เราต้องหาองค์ประกอบสูงสุดในช่วง [L, R] ซึ่งช่วงนั้นมีจำนวนเต็มที่กำหนด N ตัวเพียงตัวเดียว และ 1 <= L <= R <= 10^5 ดังนั้นถ้าอาร์เรย์เป็น Arr = [5, 10, 200] ผลลัพธ์คือ 99990 ช่วงที่เป็นไปได้ทั้งหมดคือ [1, 9], [6, 199] และ [11, 100000] ช่วงสุด

  19. หา x น้อยที่สุด ที่ (x % k) * (x / k) == n ใน C++

    ได้รับจำนวนเต็มบวกสองจำนวน n และ k เราต้องหาจำนวนเต็มบวก x ซึ่ง (x % k) * (x / k) เท่ากับ n ดังนั้นถ้า n และ k เป็น 4 และ 6 ตามลำดับ ผลลัพธ์จะเป็น 10 ดังนั้น (10 % 6) * (10 / 6) = 4 เรารู้ว่าค่าของ x % k จะอยู่ในช่วง [1 ถึง k – 1] (0 ไม่รวม) ที่นี่เราจะหาจำนวนเต็มที่เป็นไปได้ในช่วงที่หาร n ลงตัว และ

  20. หาตัวเลขมากที่สุดที่สร้างได้จากหลักที่กำหนดใน C++

    สมมติว่ามีอาร์เรย์ของหลักเลข เราต้องหาตัวเลขสูงสุดที่สามารถได้จากการใช้หลักทั้งหมดของอาร์เรย์ ดังนั้นถ้าอาร์เรย์เป็น [3, 3, 9, 6, 2, 5] ตัวเลขสูงสุดคือ 965332 จากโจทย์ เราเห็นว่าเราสามารถเรียงหลักเลขในลำดับไม่เพิ่ม (Non-increasing) แล้วพิมพ์ได้ แต่เราสามารถแก้ได้ด้วยวิธีที่มีประสิทธิภาพมากขึ้น เราสา

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