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

คำอธิบาย

คู่ที่สามารถสร้างได้จากลิงก์ลิสต์ที่กำหนดคือ: (5, 6) = 11(เท่ากับ k), (5, 4) = 9(ไม่เท่ากับ k), (5, 3) = 8(ไม่เท่ากับ k), (5, 2) = 7(ไม่เท่ากับ k), (5, 0) = 5(ไม่เท่ากับ k), (7, 6) = 13(ไม่เท่ากับ k), (7, 4) = 11(เท่ากับ k), (7, 3) = 10(ไม่เท่ากับ k), (7, 2) = 9(ไม่เท่ากับ k), (7, 0) = 7(ไม่เท่ากับ k), (8, 6) = 14(ไม่เท่ากับ k), (8, 4) = 12(ไม่เท่ากับ k), (8, 3) = 11(เท่ากับ k), (8, 2) = 10(ไม่เท่ากับ k), (8, 0) = 8(ไม่เท่ากับ k), (10, 6) = 16(ไม่เท่ากับ k), (10, 4) = 14(ไม่เท่ากับ k), (10, 3) = 13(ไม่เท่ากับ k), (10, 2) = 12(ไม่เท่ากับ k), (10, 0) = 10(ไม่เท่ากับ k), (11, 6) = 17(ไม่เท่ากับ k), (11, 4) = 15(ไม่เท่ากับ k), (11, 3) = 14(ไม่เท่ากับ k), (11, 2) = 13(ไม่เท่ากับ k), (11, 0) = 11(ไม่เท่ากับ k) ดังนั้นชัดเจนว่ามี 3 คู่ที่เท่ากับผลรวมที่กำหนด

อินพุต

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

คำอธิบาย

คู่ที่สามารถสร้างได้จากลิงก์ลิสต์ที่กำหนดคือ: (2, 6) = 8(ไม่เท่ากับ k), (2, 4) = 6(เท่ากับ k), (2, 3) = 5(ไม่เท่ากับ k), (3, 6) = 9(ไม่เท่ากับ k), (3, 4) = 7(ไม่เท่ากับ k), (3, 3) = 6(เท่ากับ k), (5, 6) = 11(ไม่เท่ากับ k), (5, 4) = 9(ไม่เท่ากับ k), (5, 3) = 8(ไม่เท่ากับ k), (6, 6) = 12(ไม่เท่ากับ k), (6, 4) = 10(ไม่เท่ากับ k), (6, 3) = 9(ไม่เท่ากับ k) ดังนั้นชัดเจนว่ามี 2 คู่ที่เท่ากับผลรวมที่กำหนด

วิธีการที่ใช้ในโปรแกรมด้านล่าง

  • รับค่า k และค่าจำนวนเต็มลงในสองเวกเตอร์เพื่อสร้างลิงก์ลิสต์

  • สร้างฟังก์ชันที่จะสร้างลิงก์ลิสต์โดยใช้เวกเตอร์ที่ส่งเป็นอาร์กิวเมนต์

  • ท่องลูปจนถึงขนาดของเวกเตอร์และสร้างอ็อบเจกต์พอยน์เตอร์ของคลาส ListNode

    • ท่องลูป while ptr->next ไม่เท่ากับ NULL และตั้ง ptr เป็น ptr->next

    • ภายใน ptr->next ตั้ง vector[i]

    • คืนค่า start

  • สร้างฟังก์ชันที่จะคืนค่าจำนวนคู่ที่ตรงกับผลรวมที่กำหนด

    • ใช้ตัวแปรชั่วคราว count ตั้งเป็น 0

    • สร้างอ็อบเจกต์พอยน์เตอร์สองตัวคือ *first_list สำหรับลิงก์ลิสต์แรกและ *second_list สำหรับลิงก์ลิสต์ที่สอง

    • เริ่มลูปจากพอยน์เตอร์เริ่มต้นของลิสต์แรกจนลิสต์ไม่ว่าง

    • ภายในลูป เริ่มลูปอีกอันจากพอยน์เตอร์เริ่มต้นของลิสต์ที่สองจนลิสต์ไม่ว่าง

    • ภายในลูป ตรวจสอบ IF (first_list->data + second_list->data) == k แล้วเพิ่ม count ขึ้น 1

    • คืนค่า count

  • พิมพ์ผลลัพธ์

ตัวอย่าง

#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