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

সি++-এ অন্য অ্যারের কোনো উপাদান দ্বারা ভাগ নয় এমন উপাদান বের করা


এই সমস্যায় আমাদের দুটি অ্যারে arr1[] এবং arr2[] দেওয়া হয়েছে। আমাদের কাজ হলো একটি অ্যারের সেই উপাদানগুলো বের করা যা অন্য অ্যারের কোনো উপাদান দিয়ে ভাগ যায় না।

সমস্যা বিবরণ: এখানে আমাদের arr1 থেকে সেসব উপাদান বের করতে হবে যা arr2-এর কোনো উপাদান দিয়ে ভাগ যায় না।

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

ইনপুট: arr1[] = {17, 15, 5, 12, 8}     arr2[] = {5, 4}

আউটপুট: 17

ব্যাখ্যা -

arr1-এর উপাদান এবং সেগুলোকে ভাগ করে দিতে পারে এমন উপাদান,

17 -> কোনো উপাদান ভাগ করতে পারে না।
15 -> 5 ভাগ করে দেয়।
5 -> 5 ভাগ করে দেয়।
12 -> 4 ভাগ করে দেয়।
8 -> 4 ভাগ করে দেয়।

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

একটি সহজ এবং নїв পদ্ধতি হলো ডায়রেক্ট মেথড ব্যবহার করা। আমরা arr1-এ লুপ চালাব এবং arr1-এর প্রতিটি উপাদানের জন্য চেক করব arr2-এর কোনো উপাদান সেটি ভাগ করে দেয় কিনা। যদি কোনো উপাদান ভাগ করে দেয় না, উপাদানটি প্রিন্ট করুন।

অ্যালগরিদম:

ধাপ ১: arr1-এ লুপ, i -> 0 থেকে n-1।
ধাপ ২.১: প্রতিটি arr1[i] এর জন্য, arr2-এ লুপ, j -> 0 থেকে n-1।
ধাপ ২.২.১: যদি arr1[i] % arr2[j] == 0, flag = -1।
ধাপ ২.৩: যদি flag != -1, arr1[i] প্রিন্ট করুন।

সমাধান minhaj করার প্রোগ্রাম (প্রথম পদ্ধতি)

#include<iostream> 
using namespace std; 

void findEleNotDivisbleByArray(int arr1[], int arr2[], int arr1Size, int arr2Size) { 
    int flag = 0; 
    for (int i = 0; i < arr1Size; i++) { 
        flag = 0; 
        for (int j = 0; j < arr2Size; j++){ 
            if( arr1[i] % arr2[j] == 0 ) { 
                flag = -1; 
                break; 
            } 
        } 
        if ( flag == 0 ) 
            cout << arr1[i] << "\t"; 
    } 
} 

int main() { 
    int arr1[] = {17, 15, 5, 12, 23, 8}; 
    int arr2[] = {5, 4}; 
    int arr1Size = sizeof(arr1)/sizeof(arr1[0]); 
    int arr2Size = sizeof(arr2)/sizeof(arr2[0]); 
    cout << "Elements of an array that are not divisible by any element of another array are "; 
    findEleNotDivisbleByArray(arr1, arr2, arr1Size, arr2Size); 
    return 0; 
}

আউটপুট

Elements of an array that are not divisible by any element of another array are 17 23 

এই সমাধানটি বৈধ কিন্তু দক্ষ নয়। তাই আসুন একটি দক্ষ সমাধান দেখি,

এই পদ্ধতিতে, আমরা arr1-এর উপাদানগুলোর জন্য isDivisible[] অ্যারে তৈরি করব। arr2-এর সব উপাদানের জন্য, arr1-এর সবচেয়ে বড় উপাদান পর্যন্ত তাদের মাল্টিপল মার্ক করব। এবং isDivisible অ্যারেতে false মার্ক করা সব উপাদান প্রিন্ট করব।

সমাধান minhaj করার প্রোগ্রাম (দক্ষ পদ্ধতি)

#include<iostream> 
using namespace std; 

void findEleNotDivisbleByArray(int arr1[], int arr2[], int arr1Size, int arr2Size) { 
    int maxEle = 0; 
    for (int i = 0; i < arr1Size; i++) 
        if (arr1[i] > maxEle) 
            maxEle = arr1[i]; 
    int mark[maxEle]; 
    for (int i = 0; i < arr2Size; i++) 
        for (int j = arr2[i]; j <= maxEle; j += arr2[i]) 
            mark[j] = 1; 
    for (int i = 0; i < arr1Size; i++) 
        if ( mark[arr1[i]] != 1) 
            cout << arr1[i] << endl; 
} 

int main() { 
    int arr1[] = {17, 15, 5, 12, 8}; 
    int arr2[] = {5, 4}; 
    int arr1Size = sizeof(arr1)/sizeof(arr1[0]); 
    int arr2Size = sizeof(arr2)/sizeof(arr2[0]); 
    cout << "Elements of an array that are not divisible by any element of another array are "; 
    findEleNotDivisbleByArray(arr1, arr2, arr1Size, arr2Size); 
    return 0; 
}

আউটপুট

Elements of an array that are not divisible by any element of another array are 17 
  1. C++-এ সার্কুলার অ্যারেতে আঁচবিক উপাদান ছাড়া সর্বোচ্চ যোগফল বের করার পদ্ধতি

  2. পরিসীমাহীন এলিমেন্টসহ অ্যারেতে ডুপ্লিকেট খুঁজে বের করা C++-তে

  3. সি++ প্রোগ্রাম: প্রথম অ্যারেতে থাকা কিন্তু দ্বিতীয় অ্যারেতে নেই এমন উপাদানগুলো খুঁজে বের করা

  4. C++ ব্যবহার করে অ্যারেতে এমন এলিমেন্ট বের করা যেটি সব এলিমেন্টকে ভাগ করে দেয়