เราได้รับลิงก์ลิสต์สองตัวและงานคือการสร้างคู่โดยใช้องค์ประกอบจำนวนเต็มของลิงก์ลิสต์ให้ผลคูณเท่ากับค่าที่กำหนดสมมติว่า k ลิงก์ลิสต์คือลำดับของโครงสร้างข้อมูลที่เชื่อมต่อกันผ่านลิงก์
อินพุต
vector v_1 = {5, 7, 8, 10, 11},. vector v_2 = {6, 4, 3, 2, 0} , int k = 20เอาต์พุต
Count of pairs from two linked lists whose product is equal to a given value k are: 2
คำอธิบาย
คู่ที่สามารถสร้างได้จากลิงก์ลิสต์ที่กำหนดคือ: (5, 6) = 30(ไม่เท่ากับ k), (5, 4) = 20(เท่ากับ k), (5, 3) = 15(ไม่เท่ากับ k), (5, 2) = 10(ไม่เท่ากับ k), (5, 0) = 0(ไม่เท่ากับ k), (7, 6) = 42(ไม่เท่ากับ k), (7, 4) = 28(ไม่เท่ากับ k), (7, 3) = 21(ไม่เท่ากับ k), (7, 2) = 14(ไม่เท่ากับ k), (7, 0) = 0(ไม่เท่ากับ k), (8, 6) = 48(ไม่เท่ากับ k), (8, 4) = 32(ไม่เท่ากับ k), (8, 3) = 24(ไม่เท่ากับ k), (8, 2) = 16(ไม่เท่ากับ k), (8, 0) = 0(ไม่เท่ากับ k), (10, 6) = 60(ไม่เท่ากับ k), (10, 4) = 40(ไม่เท่ากับ k), (10, 3) = 30(ไม่เท่ากับ k), (10, 2) = 20(ไม่เท่ากับ k), (10, 0) = 0(ไม่เท่ากับ k), (11, 6) = 66(ไม่เท่ากับ k), (11, 4) = 44(ไม่เท่ากับ k), (11, 3) = 3(ไม่เท่ากับ k), (11, 2) = 22(ไม่เท่ากับ k), (11, 0) = 0(ไม่เท่ากับ k) ดังนั้นชัดเจนว่ามี 2 คู่ที่เท่ากับผลคูณที่กำหนด
อินพุต
vector v_1 = {2, 3, 5, 6},. vector v_2 = {6, 4, 3} , int k = 9เอาต์พุต
Count of pairs from two linked lists whose sum is equal to a given value k are: 1
คำอธิบาย
คู่ที่สามารถสร้างได้จากลิงก์ลิสต์ที่กำหนดคือ: (2, 6) = 12(ไม่เท่ากับ k), (2, 4) = 8(ไม่เท่ากับ k), (2, 3) = 6(ไม่เท่ากับ k), (3, 6) = 18(ไม่เท่ากับ k), (3, 4) = 12(ไม่เท่ากับ k), (3, 3) = 9(เท่ากับ k), (5, 6) = 30(ไม่เท่ากับ k), (5, 4) = 20(ไม่เท่ากับ k), (5, 3) = 15(ไม่เท่ากับ k), (6, 6) = 36(ไม่เท่ากับ k), (6, 4) = 24(ไม่เท่ากับ k), (6, 3) = 18(ไม่เท่ากับ k) ดังนั้นชัดเจนว่ามี 1 คู่ที่เท่ากับผลรวมที่กำหนด
วิธีการที่ใช้ในโปรแกรมด้านล่าง
รับค่า 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 product_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 = 30; cout<<"Count of pairs from two linked lists whose product is equal to a given value k are: "<<product_pair(start_1, start_2, k); }เอาต์พุต
ถ้าเรารันโค้ดด้านบนจะได้ผลลัพธ์ดังนี้ −
Count of pairs from two linked lists whose product is equal to a given value k are: 2