เราได้รับอาร์เรย์ขององค์ประกอบจำนวนเต็มและเมทริกซ์หรืออาร์เรย์ 2D ที่มีขนาดแถวและคอลัมน์ที่กำหนด และงานคือการคำนวณจำนวนองค์ประกอบของอาร์เรย์ที่ปรากฏในแต่ละแถวของเมทริกซ์
อินพุต
int arr = { 2, 4, 6} and int matrix[row][col] = { { 2, 4, 6 }, {3, 4, 6}, {6, 2, 1}}เอาต์พุต
Elements of array in row 1 are: 3 Elements of array in row 2 are: 2 Elements of array in row 3 are: 2
คำอธิบาย
เรามีอาร์เรย์ที่มี 2, 4 และ 6 เป็นองค์ประกอบ และตอนนี้เราจะตรวจสอบการเกิดของ 3 องค์ประกอบในทุกแถวของเมทริกซ์โดยการจับคู่องค์ประกอบของอาร์เรย์กับองค์ประกอบของเมทริกซ์ เช่น 2, 4 และ 6 ทั้งหมดอยู่ในแถวแรกของเมทริกซ์ ดังนั้นจำนวนองค์ประกอบสำหรับแถว 1 คือ 3 เช่นเดียวกัน จำนวนองค์ประกอบสำหรับแถว 2 คือ 2 เพราะมีแค่ 4 และ 6 และจำนวนองค์ประกอบสำหรับแถว 3 คือ 2 เพราะมีแค่ 2 และ 6
อินพุต
int arr = { 1, 3} and int matrix[row][col] = { { 1, 4, 6 }, {3, 1, 6}, {6, 2, 4}}เอาต์พุต
Elements of array in row 1 are: 1 Elements of array in row 2 are: 2 Elements of array in row 3 are: 0
คำอธิบาย
เรามีอาร์เรย์ที่มี 1 และ 3 เป็นองค์ประกอบ และตอนนี้เราจะตรวจสอบการเกิดของ 2 องค์ประกอบในทุกแถวของเมทริกซ์โดยการจับคู่องค์ประกอบของอาร์เรย์กับองค์ประกอบของเมทริกซ์ เช่น มีแค่ 1 อยู่ในแถวแรกของเมทริกซ์ ดังนั้นจำนวนองค์ประกอบสำหรับแถว 1 คือ 1 เช่นเดียวกัน จำนวนองค์ประกอบสำหรับแถว 2 คือ 2 เพราะ 1 และ 3 ทั้งคู่อยู่ และจำนวนองค์ประกอบสำหรับแถว 3 คือ 0 เพราะไม่มี 1 และ 3 เลย
วิธีการที่ใช้ในโปรแกรมด้านล่าง
สามารถมีหลายวิธีในการแก้ปัญหาที่กำหนด คือ วิธีเรียบง่ายและวิธีที่มีประสิทธิภาพ มาดู วิธีเรียบง่าย ก่อน
รับอาร์เรย์ขององค์ประกอบจำนวนเต็มและเมทริกซ์ขนาดแถวและคอลัมน์
คำนวณขนาดของอาร์เรย์และส่งอาร์เรย์ เมทริกซ์ และขนาดของอาร์เรย์ไปยังฟังก์ชันเพื่อประมวลผลต่อ
ใช้ตัวแปรชั่วคราว count เพื่อเก็บจำนวนองค์ประกอบที่ปรากฏในแถวของเมทริกซ์
เริ่มลูป FOR จาก 0 ถึงขนาดแถวของเมทริกซ์
ภายในลูป เริ่ม FOR จาก 0 ถึงขนาดของอาร์เรย์
ตั้ง temp เป็น arr[k]
เริ่มลูป FOR อีกอันจาก 0 ถึงขนาดคอลัมน์ของเมทริกซ์
ภายในลูป ตรวจสอบ IF temp == matrix[i][j] แล้วเพิ่ม count ขึ้น 1
ตั้ง count เป็น 0 เพื่อรีเซ็ตหลังจากเปลี่ยนแถวทุกครั้ง
พิมพ์ค่า count ก่อนเปลี่ยนแถวทุกครั้ง
วิธีที่มีประสิทธิภาพ
รับอาร์เรย์ขององค์ประกอบจำนวนเต็มและเมทริกซ์ขนาดแถวและคอลัมน์
คำนวณขนาดของอาร์เรย์และส่งอาร์เรย์ เมทริกซ์ และขนาดของอาร์เรย์ไปยังฟังก์ชันเพื่อประมวลผลต่อ
เริ่มลูป FOR จาก 0 ถึงขนาดแถวของเมทริกซ์
สร้างตัวแปรประเภท unordered_map
เริ่มลูป FOR อีกอันจาก 0 ถึงขนาดคอลัมน์ของเมทริกซ์
ตั้ง unordered map ด้วย matrix[i][j] เป็น 1
ใช้ตัวแปรชั่วคราว count เพื่อเก็บจำนวนองค์ประกอบที่ปรากฏในแถวของเมทริกซ์
ภายในลูป เริ่ม FOR จาก 0 ถึงขนาดของอาร์เรย์
ตรวจสอบ IF um[arr[j]] == 1 แล้วเพิ่ม count ขึ้น 1
พิมพ์ค่า count ก่อนเปลี่ยนแถวทุกครั้ง
ตัวอย่าง (วิธีเรียบง่าย)
#include<bits/stdc++.h> using namespace std; #define row 3 #define col 3 void arr_matrix(int matrix[row][col], int arr[], int size){ int count = 0; //for matrix row for(int i=0; i<row; i++){ //for array for(int k=0 ; k<size ; k++){ int temp = arr[k]; //for matrix col for(int j = 0; j<col; j++){ if(temp == matrix[i][j]){ count++; } } } cout<<"Elements of array in row "<< i + 1 <<" are: " << count << endl; count = 0; } } int main(){ int matrix[row][col] = { { 2, 4, 6 }, {3, 4, 6}, {6, 2, 1}}; int arr[] = { 2, 4, 6}; int size = sizeof(arr) / sizeof(arr[0]); arr_matrix(matrix, arr, size); }เอาต์พุต
ถ้าเรารันโค้ดด้านบนจะได้ผลลัพธ์ดังนี้ −
Elements of array in row 1 are: 3 Elements of array in row 2 are: 2 Elements of array in row 3 are: 2
ตัวอย่าง (วิธีที่มีประสิทธิภาพ)
#include <bits/stdc++.h> using namespace std; #define row 3 #define col 3 void arr_matrix(int matrix[row][col], int arr[], int size){ for (int i = 0; i < row; i++){ unordered_map<int, int> um; for (int j = 0; j < col; j++){ um[matrix[i][j]] = 1; } int count = 0; for (int j = 0; j < size; j++) { if (um[arr[j]]) count++; } cout<<"Elements of array in row "<< i + 1 <<" are: " << count << endl; } } int main(){ int matrix[row][col] = { { 2, 4, 6 }, {3, 4, 6}, {6, 2, 1}}; int arr[] = { 2, 4, 6}; int size = sizeof(arr) / sizeof(arr[0]); arr_matrix(matrix, arr, size); }เอาต์พุต
ถ้าเรารันโค้ดด้านบนจะได้ผลลัพธ์ดังนี้ −
Elements of array in row 1 are: 3 Elements of array in row 2 are: 2 Elements of array in row 3 are: 2