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-> next가 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