Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับองค์ประกอบของอาร์เรย์ที่ปรากฏในทุกแถวของเมทริกซ์ NxM ใน C++


เราได้รับอาร์เรย์ขององค์ประกอบจำนวนเต็มและเมทริกซ์หรืออาร์เรย์ 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