Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จำนวนเซตขั้นต่ำขนาดสูงสุด 2 และผลรวมจำกัดโดยค่าที่กำหนดใน C++


ข้อความโจทย์

กำหนดอาร์เรย์ arr[] ของจำนวนบวก หาจำนวนเซตน้อยที่สุดในอาร์เรย์ที่สอดคล้องกับเงื่อนไขดังนี้

  • เซตหนึ่งสามารถมีสมาชิกได้สูงสุด 2 ตัว สองสมาชิกไม่จำเป็นต้องติดกัน
  • ผลรวมของสมาชิกในเซตควรน้อยกว่าหรือเท่ากับค่า Key ที่กำหนด สมมติว่า Key มากกว่าหรือเท่ากับสมาชิกที่ใหญ่ที่สุดในอาร์เรย์

ตัวอย่าง

ถ้า arr[] = {1, 2, 3, 4} และ k = 5 สามารถสร้าง 2 คู่ได้ −

{1, 4} และ {2, 3}

อัลกอริทึม

  • เรียงลำดับอาร์เรย์
  • เริ่มต้นพอยน์เตอร์สองตัวจากสองมุมของอาร์เรย์ที่เรียงแล้ว หากผลรวมของพวกเขาน้อยกว่าหรือเท่ากับ Key ให้จับคู่เป็นเซต มิฉะนั้นให้พิจารณาสมาชิกสุดท้ายเพียงตัวเดียว

ตัวอย่าง

#include <iostream> #include <algorithm> using namespace std; int getMinSets(int *arr, int n, int key) {     int i, j;     sort(arr, arr + n);     for (i = 0, j = n - 1; i <= j; ++i) {       if (arr[i] + arr[j] <= key) {           --j;       }     }     return i; } int main() {     int arr[] = {1, 2, 3, 4};     int key = 5;     int n = sizeof(arr) / sizeof(arr[0]);     cout << "Minimum set = " << getMinSets(arr, n, key) << endl;     return 0; }

ผลลัพธ์

เมื่อคอมไพล์และรันโปรแกรมข้างต้น จะได้ผลลัพธ์ดังนี้

Minimum set = 2