Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

दो लिंक्ड सूचियों से जोड़े गिनें जिनका योग C++ में दिए गए मान के बराबर है

हमें दो लिंक्ड सूचियों के साथ दिया गया है और कार्य लिंक्ड सूचियों के पूर्णांक तत्वों का उपयोग करके जोड़े बनाना है, जैसे कि उनका योग किसी दिए गए मान के बराबर है, मान लीजिए, k। लिंक की गई सूची डेटा संरचनाओं का एक क्रम है, जो लिंक के माध्यम से एक साथ जुड़े होते हैं।

इनपुट

vector v_1 = {5, 7, 8, 10, 11},.
vector v_2 = {6, 4, 3, 2, 0} , int k = 11

आउटपुट

Count of pairs from two linked lists whose sum is equal to a given value k are: 4

स्पष्टीकरण

The pairs which can be formed using the given linked lists are: (5, 6) = 11(equals to k), (5, 4) = 9(not equals to k), (5, 3) = 8(not equals to k), (5, 2) = 7(not equals to k), (5, 0) = 5(not equals to k), (7, 6) = 13(not equals to k), (7, 4) = 11(equals to k), (7, 3) = 10(not equals to k), (7, 2) = 9(not equals to k), (7, 0) = 7(not equals to k), (8, 6) = 14(not equals to k), (8, 4) = 12(not equals to k), (8, 3) = 11(equals to k), (8, 2) = 10(not equals to k), (8, 0) = 8(not equals to k), (10, 6) = 16(not equals to k), (10, 4) = 14(not equals to k), (10, 3) = 13(not equals to k), (10, 2) = 12(not equals to k), (10, 0) = 10(not equals to k), (11, 6) = 17(not equals to k), (11, 4) = 15(not equals to k), (11, 3) = 14(not equals to k), (11, 2) = 13(not equals to k), (11, 0) = 11(not equals to k). So, clearly there are 3 pairs which are equal to the given sum.

इनपुट

vector v_1 = {2, 3, 5, 6},.
vector v_2 = {6, 4, 3} , int k = 6

आउटपुट

Count of pairs from two linked lists whose sum is equal to a given value k are: 2

स्पष्टीकरण

The pairs which can be formed using the given linked lists are: (2, 6) = 8(not equals to k), (2, 4) = 6(equals to k), (2, 3) = 5(not equals to k), (3, 6) = 9(not equals to k), (3, 4) = 7(not equals to k), (3, 3) = 6(equals to k), (5, 6) = 11(not equals to k), (5, 4) = 9(not equals to k), (5, 3) = 8(not equals to k), (6, 6) = 12(not equals to k), (6, 4) = 10(not equals to k), (6, 3) = 9(not equals to k),. So, clearly there are 2 pairs which are equal to the given sum.

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

  • k और पूर्णांक प्रकार के मानों को दो वैक्टर में इनपुट करें जैसे कि हम वैक्टर को एक लिंक्ड सूची बनाने के लिए पास कर सकते हैं

  • एक फ़ंक्शन बनाएं जो फ़ंक्शन के तर्क के रूप में पारित वेक्टर का उपयोग करके एक लिंक्ड सूची बनाएगा।

  • लूप को वेक्टर के आकार तक ट्रैवर्स करें और क्लास का पॉइंटर ऑब्जेक्ट बनाएं

    लिस्टनोड

    • लूप को पार करें जबकि ptr-> अगला NULL के बराबर नहीं है और ptr को ptr->next

      पर सेट करें
    • Ptr के अंदर->अगला सेट वेक्टर[i]

    • वापसी प्रारंभ

  • एक फ़ंक्शन बनाएं जो दिए गए योग से मेल खाने वाले जोड़े की संख्या लौटाएगा।

    • एक अस्थायी चर गणना लें और इसे 0 पर सेट करें

    • दो पॉइंटर ऑब्जेक्ट बनाएं यानी पहली लिंक की गई सूची के लिए *first_list और दूसरी लिंक की गई सूची के लिए *second_list।

    • सूची के खाली न होने तक पहली सूची के प्रारंभ सूचक से लूप प्रारंभ करें

    • लूप के अंदर, दूसरी सूची के प्रारंभ सूचक से सूची खाली न होने तक एक और लूप प्रारंभ करें

    • लूप के अंदर, IF (first_list->data + second_list->data) ==k चेक करें और फिर काउंट को 1 तक बढ़ा दें

    • गिनती वापस करें

  • परिणाम प्रिंट करें।

उदाहरण

#include<bits/stdc++.h>
using namespace std;
class ListNode{
public:
   int data;
   ListNode *next;
   ListNode(int data){
      this->data = data;
      next = NULL;
   }
};
ListNode *CreateList(vector v){
   ListNode *start = new ListNode(v[0]);
   for (int i = 1; i < v.size(); i++){
      ListNode *ptr = start;
      while (ptr->next != NULL){
         ptr = ptr->next;
      }
      ptr->next = new ListNode(v[i]);
   }
   return start;
}
int sum_pair(ListNode *start_1, ListNode *start_2, int k){
   int count = 0;
   ListNode *first_list , *second_list;
   for (first_list = start_1; first_list != NULL; first_list = first_list->next){
      for (second_list = start_2; second_list != NULL; second_list = second_list->next){
         if ((first_list->data + second_list->data) == k){
            count++;
         }
      }
   }
   return count;
}
int main(){
   vector<int> v_1 = {5, 7, 8, 10, 11};
   ListNode* start_1 = CreateList(v_1);
   vector v_2 = {6, 4, 3, 2, 0};
   ListNode* start_2 = CreateList(v_2);
   int k = 11;
   cout<<"Count of pairs from two linked lists whose sum is equal to a given value k are: "<<sum_pair(start_1, start_2, k);
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -

Count of pairs from two linked lists whose sum is equal to a given value k are: 4

  1. एक क्रमबद्ध दोगुनी लिंक की गई सूची में ट्रिपल की गणना करें जिसका योग C++ में दिए गए मान x के बराबर है

    उदाहरण के लिए इनपुट linked list: [ 3−4−13−5−10−10−0 ] x=20 आउटपुट Count of triplets in a sorted doubly linked list whose product is equal to a given value x are: 2 स्पष्टीकरण Triplets will be: ( 3,4,13 ) and ( 10,10,0 ) इनपुट linked list: [ 4−3−1&minu

  1. एक क्रमबद्ध डबल लिंक्ड सूची में ट्रिपल गिनें जिसका उत्पाद सी ++ में दिए गए मान x के बराबर है

    पूर्णांक मानों वाली एक क्रमबद्ध डबल लिंक्ड सूची को देखते हुए। लक्ष्य उन त्रिगुणों को खोजना है जिनका गुणनफल दिए गए मान x के बराबर है। यदि इनपुट लिंक्ड सूची 3−4−1−2 है और x 6 है तो गिनती 1 (ट्रिपलेट (3,1,2)) होगी उदाहरण के लिए इनपुट linked list: [ 200−4−16−5−10−10&min

  1. दो बीएसटी से जोड़े की गणना करें जिनकी राशि सी ++ में दिए गए मान x के बराबर है

    हमें इनपुट के रूप में दो बाइनरी सर्च ट्री और एक वेरिएबल x दिया गया है। लक्ष्य प्रत्येक पेड़ से नोड्स के जोड़े को ढूंढना है ताकि नोड्स के मूल्य का योग x के बराबर हो। BST_1 से नोड 1 और BST_2 से नोड 2 लें और दोनों का डेटा भाग जोड़ें। यदि योग =x. वेतन वृद्धि की संख्या। आइए उदाहरणों से समझते हैं। इनपुट