ដកនៃម៉ាទ្រីកពីរ


កម្រិតលំបាក មានភាពងាយស្រួល
សួរញឹកញាប់ Capgemini MAQ o9 ដំណោះស្រាយ
អារេ ម៉ាទ្រីស កម្មវិធីសាលា

សេចក្តីថ្លែងការណ៍បញ្ហា។

នៅក្នុងបញ្ហា“ ការដកចំនួនពីរម៉ាទ្រីស” យើងបានអោយគណិតវិទ្យាពីរនិងខ។ យើងត្រូវស្វែងរកវគ្គផ្តាច់ព្រ័ត្រ ម៉ាទ្រីស បន្ទាប់ពីដកម៉ាទ្រីសខពីម៉ាទ្រីសក។ ប្រសិនបើការបញ្ជាទិញគឺដូចគ្នាសម្រាប់វិញ្ញាសាទាំងពីរនោះមានតែយើងទេដែលអាចដកវាបានបើមិនដូច្នេះទេយើងមិនអាចធ្វើបានទេ។

ទ្រង់ទ្រាយបញ្ចូល

ខ្សែទីមួយដែលមានតម្លៃចំនួនគត់ចំនួនបួនគឺ R1, c1, r2, c2 ។ នៅកន្លែងដែល r1 និង c1 បញ្ជាក់ចំនួនជួរដេកនិងជួរឈរនៃម៉ាទ្រីសទីមួយ។ និង r2, c2 តំណាងឱ្យចំនួនជួរដេកជួរឈរនៃម៉ាទ្រីសទីពីរ។

បន្ទាត់ r1 បន្ទាប់មានតម្លៃចំនួនគត់ c1 ។

និងខ្សែបន្ទាប់ r2 ដែលមានតម្លៃចំនួនគត់ c2 ។

ទ្រង់ទ្រាយលទ្ធផល

បោះពុម្ពម៉ាទ្រីសចុងក្រោយបន្ទាប់ពីដកក្នុងវិធីមួយដែលរាល់ជួរដេកចាប់ផ្តើមពីបន្ទាត់ថ្មីនិងរាល់ធាតុដែលបំបែកដោយចន្លោះក្នុងជួរនីមួយៗ។

ឧបសគ្គ។

  • 1 <= r1, c1, r2, c2 <= ២០០០ ។
  • ១ <= | ម [ខ្ញុំ] [ចា] | <= 1 ^ 10 កន្លែងដែលម៉ែគឺជាម៉ាទ្រីសនិងទីតាំងនៃធាតុនៅជួរដេកអាយនិងជួរឈរទី j ។

ឧទាហរណ៍

2 2 2 2
2 8
0 9
5 6
11 3
-3 2
-11 6

ការពន្យល់: យើងអាចរកបានដកនៃម៉ាទ្រីសដោយដកធាតុដែលត្រូវគ្នាទៅក្នុងម៉ាទ្រីស C និងឃ។

ដកនៃម៉ាទ្រីកពីរ

ដកនៃម៉ាទ្រីកពីរ

ដកនៃម៉ាទ្រីកពីរ

ដកនៃម៉ាទ្រីកពីរ

ក្បួនដោះស្រាយសម្រាប់ការដកពីរម៉ាទ្រីស

1. សម្រាប់ជួរនីមួយៗនៅក្នុងពីរគូ

១.១ ដកធាតុនីមួយៗក្នុងម៉ាទ្រីស B ជាមួយធាតុក្នុងម៉ាទ្រីសអេ។

1.2 ទុកលទ្ធផលនៅក្នុងទីតាំងតែមួយនៅក្នុងម៉ាទ្រីសជំនួយខ្លះ។

2. រំកិលទៅជួរបន្ទាប់ហើយធ្វើតាមជំហានទី ១.១ និង ១.២ រហូតដល់ចុងបញ្ចប់នៃវិញ្ញាសា។

3. បោះពុម្ពម៉ាទ្រីសជំនួយ។

ការអនុវត្តន៍

កម្មវិធី C ++ សំរាប់ដកនៃម៉ាទ្រីកពីរ

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int r1,c1,r2,c2;
    cin>>r1>>c1>>r2>>c2;
    int a[r1][c1];
    int b[r2][c2];
    for(int i=0;i<r1;i++)
    {
        for(int j=0;j<c1;j++)
        {
            cin>>a[i][j];
        }
    }
    for(int i=0;i<r2;i++)
    {
        for(int j=0;j<c2;j++)
        {
            cin>>b[i][j];
        }
    }
    if(c1!=c2 || r1!=r2)
    {
        cout<<"We can’t subtract these matrices.";
    }
    else
    {
    int c[r1][c2];
    for(int i=0;i<r1;i++)
    {
        for(int j=0;j<c2;j++)
        {
            c[i][j]=a[i][j]-b[i][j];
            cout<<c[i][j]<<"  ";
        }
        cout<<endl;
    }
    }
    return 0;
}

កម្មវិធីចាវ៉ាសម្រាប់ការដកពីរម៉ាទ្រីស

import java.io.*; 
import java.util.Scanner;
class TutorialCup
{ 
    // Driver code 
    public static void main(String[] args) 
    { 
        int r1,c1,r2,c2;
        Scanner inp = new Scanner(System.in);
        r1 = inp.nextInt();
        c1 = inp.nextInt();
        r2 = inp.nextInt();
        c2 = inp.nextInt();
        int a[][] = new int[r1][c1];
        for(int i=0;i<r1;i++)
        {
            for(int j=0;j<c1;j++)
            {
                a[i][j]=inp.nextInt();
            }
        }
        int b[][] = new int[r2][c2];
        for(int i=0;i<r2;i++)
        {
            for(int j=0;j<c2;j++)
            {
                b[i][j]=inp.nextInt();
            }
        }
        if(r1!=r2 && c1!=c2) 
        { 
            System.out.println("\nWe can’t subtract these matrices."); 
        } 
        else
        {
            int c[][] = new int[r1][c1];
            for(int i=0;i<r1;i++)
            {
                for(int j=0;j<c1;j++)
                {
                    c[i][j]=a[i][j]-b[i][j];
                    System.out.print(c[i][j] + " ");
                }
                System.out.println();
            }
        }
    } 
}
2 2 2 2
2 8 
0 9 
5 6 
11 3
-3  2  
-11  6

ការវិភាគភាពស្មុគស្មាញសម្រាប់ការដកពីរម៉ាទ្រីស

ស្មុគស្មាញពេលវេលា

O (n ^ 2) ដែល n ជាចំនួនអតិបរមានៃ R1 និង c1 ។ នៅទីនេះយើងគ្រាន់តែដំណើរការរង្វិលជុំចំនួនពីររង្វិលជុំដំបូងដំណើរការ r1 ដងហើយរង្វិលជុំទីពីរដំណើរការ c1 ដង។

ភាពស្មុគស្មាញនៃលំហ

O (m ^ 2) ដែល m ជាចំនួនអតិបរមានៃ R1 និង c1 ។ នៅទីនេះយើងបង្កើតកន្លែងទំនេរបន្ថែមសម្រាប់រក្សាទុកលទ្ធផលនៃការដកម៉ាទ្រីស។ នៅទីនេះយើងក៏បានប្រកាសទំហំ r1 * c1 សម្រាប់ការបញ្ចូលម៉ាទ្រីសទីមួយនិងទំហំ r2 * c2 សម្រាប់ការបញ្ចូលម៉ាទ្រីសទីពីរ។

ឯកសារយោង