C++ 中从两个链表中计数乘积等于给定值的配对
给定两个链表,任务是使用链表的整数元素形成配对,使得它们的乘积等于给定的值,例如 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
解释
The pairs which can be formed using the given linked lists are: (5, 6) = 30(not equals to k), (5, 4) = 20(equals to k), (5, 3) = 15(not equals to k), (5, 2) = 10(not equals to k), (5, 0) = 0(not equals to k), (7, 6) = 42(not equals to k), (7, 4) = 28(not equals to k), (7, 3) = 21(not equals to k), (7, 2) = 14(not equals to k), (7, 0) = 0(not equals to k), (8, 6) = 48(not equals to k), (8, 4) = 32(not equals to k), (8, 3) = 24(not equals to k), (8, 2) = 16(not equals to k), (8, 0) = 0(not equals to k), (10, 6) = 60(not equals to k), (10, 4) = 40(not equals to k), (10, 3) = 30(not equals to k), (10, 2) = 20(not equals to k), (10, 0) = 0(not equals to k), (11, 6) = 66(not equals to k), (11, 4) = 44(not equals to k), (11, 3) = 3(not equals to k), (11, 2) = 22(not equals to k), (11, 0) = 0(not equals to k). So, clearly there are 2 pairs which are equal to the given product.
输入
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
解释
The pairs which can be formed using the given linked lists are: (2, 6) = 12(not equals to k), (2, 4) = 8(not equals to k), (2, 3) = 6(not equals to k), (3, 6) = 18(not equals to k), (3, 4) = 12(not equals to k), (3, 3) = 9(equals to k), (5, 6) = 30(not equals to k), (5, 4) = 20(not equals to k), (5, 3) = 15(not equals to k), (6, 6) = 36(not equals to k), (6, 4) = 24(not equals to k), (6, 3) = 18(not equals to k),. So, clearly there is 1 pair which is equal to the given sum.
下面程序中使用的方案如下
输入 k 的值和整数类型的值到两个向量中,以便我们可以将向量传递给形成链表。
创建一个函数,该函数将使用作为参数传递给函数的向量来创建一个链表。
遍历循环直到向量的长度,并创建类指针对象
ListNode
遍历循环,直到 ptr->next 不等于 NULL,并将 ptr 设置为 ptr->next
在 ptr->next 中设置 vector[i]
返回开始
创建一个函数,该函数将返回与给定乘积匹配的配对的数量。
取一个临时变量 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
广告