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

C++-এ সর্টেড ডাবলি লিংকড লিস্টে যেসব ট্রিপলেটের গুণফল x সেটির সংখ্যা গণনা


একটি সর্টেড ডাবলি লিংকড লিস্ট দেওয়া আছে যাতে ইন্টিজার ভ্যালু আছে। লক্ষ্য হলো যেসব ট্রিপলেটের গুণফল দেওয়া x-এর সমান সেটি বের করা। যদি ইনপুট লিংকড লিস্ট 3-4-1-2 এবং x = 6 হয়, তবে কাউন্ট হবে ১ (ট্রিপলেট (৩,১,২))।

C++-এ সর্টেড ডাবলি লিংকড লিস্টে যেসব ট্রিপলেটের গুণফল x সেটির সংখ্যা গণনা

উদাহরণ ১

ইনপুট

linked list: [ 200-4-16-5-10-10-2 ] x=200

আউটপুট

সর্টেড ডাবলি লিংকড লিস্টে গুণফল x হয় এমন ট্রিপলেটের সংখ্যা: 3

ব্যাখ্যা

ট্রিপলেটগুলো: (4,5,10), (4,5,10) এবং (10,10,2)

উদাহরণ ২

ইনপুট

linked list: [ 4-3-1-5-2-4-2] x=12

আউটপুট

সর্টেড ডাবলি লিংকড লিস্টে গুণফল x হয় এমন ট্রিপলেটের সংখ্যা: 3

ব্যাখ্যা

ট্রিপলেটগুলো: (4,3,1), (3,1,4) এবং (3,2,2)

প্রয়োগ করা পদ্ধতি

এই পদ্ধতিতে:

  • লিংকড লিস্ট নোড হিসেবে struct নেওয়া হয় যাতে int data পার্ট এবং সেলফ-রেফারেন্সিয়াল next ও previous পয়েন্টার থাকে।

  • insert_node(struct block** head, int data) ফাংশনটি হেডে নোড যোগ করে।

  • Product_x(struct block* head, int x) ফাংশনটি ডাবলি লিংকড লিস্টের হেড পয়েন্টার এবং ইন্টিজার x নিয়ে ডাটা পার্টের গুণফল x হয় 그런 ট্রিপলেটের কাউন্ট রিটার্ন করে।

  • আরম্ভিক কাউন্ট ০ রাখুন।

  • তিনটি পয়েন্টার temp_1, temp_2 এবং temp_3 নিন struct block টাইপের।

  • temp_1 হেড থেকে, temp_2 temp_1-এর নেক্সট, temp_3 temp_2-এর নেক্সট থেকে শুরু করুন।

  • এই পয়েন্টারগুলো দিয়ে লাস্ট নোড পর্যন্ত ট্রুভার্স করুন।

  • যদি বর্তমান তিনটি পয়েন্টারের ডাটা পার্টের গুণফল x হয় ((temp_1->data * temp_2->data * temp_3->data) == x), তবে কাউন্ট বাড়ান।

  • শেষে ট্রিপলেটের সংখ্যা count-এ থাকবে।

  • count রিটার্ন করুন ফলাফল হিসেবে।

উদাহরণ কোড

#include <iostream> 
using namespace std; 

struct block {
    int data; 
    struct block *next, *prev; 
}; 

void insert_node(struct block** head, int data) {
    struct block* ptr = new block(); 
    ptr->data = data; 
    ptr->next = NULL; 
    ptr->prev = NULL; 
    
    if ((*head) == NULL) {
        (*head) = ptr; 
    } else {
        ptr->next = *head; 
        (*head)->prev = ptr; 
        (*head) = ptr; 
    } 
} 

int Product_x(struct block* head, int x) {
    int count = 0; 
    struct block *temp_1, *temp_2, *temp_3; 
    
    for (temp_1 = head; temp_1 != NULL; temp_1 = temp_1->next) {
        for (temp_2 = temp_1->next; temp_2 != NULL; temp_2 = temp_2->next) {
            for (temp_3 = temp_2->next; temp_3 != NULL; temp_3 = temp_3->next) {
                if ((temp_1->data * temp_2->data * temp_3->data) == x) {
                    count++; 
                } 
            } 
        } 
    } 
    
    return count; 
} 

int main() { 
    struct block* head = NULL; 
    insert_node(&head, 200); 
    insert_node(&head, 100); 
    insert_node(&head, 16); 
    insert_node(&head, 14); 
    insert_node(&head, 10); 
    insert_node(&head, 10); 
    insert_node(&head, 2); 
    int x = 200; 
    cout << "সর্টেড ডাবলি লিংকড লিস্টে গুণফল x হয় এমন ট্রিপলেটের সংখ্যা: " << Product_x(head, x); 
    return 0; 
}

আউটপুট

উপরোক্ত কোডটি রান করলে নিচের আউটপুটটি আসবে:

সর্টেড ডাবলি লিংকড লিস্টে গুণফল x হয়那些 ट्रিপলেটের সংখ্যা: 1

  1. C++-এ সর্টেড ডাবলি লিংকড লিস্টে যেসব ট্রিপলেটের যোগফল x সেটির সংখ্যা গণনা

  2. C++-এ দুটি BST-র নোড জোড়া যাদের যোগফল x গণনা

  3. C++-এ দুটি সর্টেড অ্যারে থেকে যোগফল x পাওয়া যাবে এমন জোড়া সংখ্যা গণনা

  4. C++-এ সর্টেড ও রোটেটেড লিংকড লিস্টে রোটেশনের সংখ্যা গণনা