কম্পিউটার টিউটোরিয়াল

C++-এ -1 এবং +1=array-এর কোনো K আকারের সাবসেটের যোগফল ০ কিনা তা খুঁজুন


এই সমস্যায়, আমাদের একটি অ্যারে দেওয়া আছে যাতে শুধু ১ এবং -১ রয়েছে এবং একটি পূর্ণসংখ্যা k। আমাদের কাজ হল K আকারের যেকোনো সাবসেটের যোগফল ০ কিনা তা খুঁজে বের করা।

উদাহরণ দিয়ে বুঝি,

ইনপুট: arr[] = {-1, 1, -1, -1, 1, 1, -1}, k = 4

আউটপুট: YES

ব্যাখ্যা:

আকার ৪-র একটি সাবসেট, {-1, 1, -1, 1}। যোগফল = -1 + 1 - 1 + 1 = 0

সমাধানের পদ্ধতি:

আমাদের যাচাই করতে হবে কি k আকারের যেকোনো সাবসেট আছে যার যোগফল ০। যেহেতু সাবসেটে যেকোনো এলিমেন্ট নেওয়া যায়, যোগফল ০ হবে যদি সাবসেটে ১ এবং -১-এর সংখ্যা সমান থাকে। এটি শুধু তখনই সম্ভব যখন সাবসেটের আকার জোড় হবে।

সহজ কথায়,

  • যদি k জোড় হয়, true রিটার্ন করুন।
  • যদি k বিজোড় হয়, false রিটার্ন করুন।

সমাধান দর্শানোর প্রোগ্রাম,

উদাহরণ

#include <iostream> 
using namespace std; 

int countOne(int a[], int n) { 
    int i, count = 0; 
    for (i = 0; i < n; i++) 
        if (a[i] == 1) 
            count++; 
    return count; 
} 

bool isSubSetSumZeroFound(int arr[], int n, int K) { 
    int totalOne = countOne(arr, n); 
    int totalNegOne = n - totalOne; 
    return (K % 2 == 0 && totalOne >= K / 2 && totalNegOne >= K / 2); 
} 

int main() { 
    int arr[] = { 1, 1, -1, -1, 1, -1, 1, 1, -1 }; 
    int size = sizeof(arr) / sizeof(arr[0]); 
    int K = 4; 
    if (isSubSetSumZeroFound(arr, size, K)) 
        cout << "Subset of size " << K << " with sum of all elements 0 exists."; 
    else 
        cout << "No subset found"; 
    return 0; 
}

আউটপুট

Subset of size 4 with sum of all elements 0 exists.

  1. C++ ব্যবহার করে অ্যারেতে সমস্ত ভিন্ন সাবসেট (সাবসিকোয়েন্স) যোগফল খুঁজে বের করা

  2. C++ প্রোগ্রাম: দুটি সংখ্যা বের করা যাদের যোগফল ও গুণফল N-র সমান

  3. C++-এ দিয়ে गये GCD এবং LCM থেকে যেকোনো পেয়ার খুঁজে বের করা

  4. C এবং C++-এ 'long' ডেটা টাইপের প্রয়োজনীয়তা কি?