Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में दो मैट्रिक्स को बराबर बनाने के लिए आवश्यक परिवर्तनों की संख्या ढूंढना


इस समस्या में, हमें समान आकार के दो मैट्रिक्स mat1[][] और mat2[][] दिए जाते हैं। हमारा कार्य दो मैट्रिक्स को बराबर बनाने के लिए आवश्यक परिवर्तनों की संख्या ढूंढना है।

मैट्रिक्स पर परिवर्तन हैं -

  • दोनों मैट्रिक्स में से किसी एक को चुनें।

  • मैट्रिक्स से एक पंक्ति या स्तंभ चुनें।

  • चुनी गई पंक्ति या स्तंभ के सभी तत्वों में 1 जोड़ें।

आइए एक उदाहरण से समस्या को समझते हैं,

इनपुट

mat1[][] = {{1 2} {2 1}} mat2[][] = {{2 3} {4 3}}

आउटपुट

3

व्याख्या

1 2 => 2 2 => 2 3 => 2 3 2 1 => 3 1 => 3 2 => 4 3

समाधान दृष्टिकोण

इस समस्या का एक सरल समाधान यह जांचना है कि परिवर्तन संभव है या नहीं। इसके लिए, हमें जांचना होगा -

if( mat[i][j] - mat[i][0] - mat[0][j] + mat[0][0] != 0 )

तो कोई समाधान मौजूद नहीं है।

अब, यदि परिवर्तन संभव है, तो हम पंक्तियों और स्तंभों के लिए परिवर्तनों की गिनती करेंगे।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला प्रोग्राम,

उदाहरण

#include <bits/stdc++.h> using namespace std; const int MAX = 100; int countTransformationReq(int mat1[][MAX], int mat2[][MAX], int m, int n) {    for (int i = 0; i < n; i++)       for (int j = 0; j < m; j++)          mat1[i][j] -= mat2[i][j];       for (int i = 1; i < n; i++)          for (int j = 1; j < m; j++)             if (mat1[i][j] - mat1[i][0] - mat1[0][j] +                mat1[0][0] != 0)    return -1;    int trxCount = 0;    for (int i = 0; i < n; i++)       trxCount += abs(mat1[i][0]);    for (int j = 0; j < m; j++)       trxCount += abs(mat1[0][j] - mat1[0][0]);    return (trxCount); } int main() {    int mat1[MAX][MAX] = { {1, 2}, {2, 1}};    int mat2[MAX][MAX] = { {2, 3}, {4, 3}};    cout<<"The number of transformation to make the teo    maxtrces equal are "<<countTransformationReq(mat1, mat2, 2,    2) ;    return 0; }

आउटपुट

The number of transformation to make the teo maxtrces equal are 3

कुशल दृष्टिकोण

इस समस्या का एक अधिक प्रभावी समाधान हैंडशेक फॉर्मूला का उपयोग करना है।

हम एक temp[] सरणी बनाएंगे जो सरणी के मॉड्यूलो में 0 और 1 की घटनाओं को गिनेगा। और फिर गिनती मान वापस करेंगे।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला प्रोग्राम,

उदाहरण

#include<iostream> using namespace std; int countEvenSumSubArray(int arr[], int n){    int temp[2] = {1, 0};    int count = 0, sum = 0;    for (int i=0; i<=n-1; i++){       sum = ( (sum + arr[i]) % 2 + 2) % 2;       temp[sum]++;    }    count += (temp[0]*(temp[0]-1)/2);    count += (temp[1]*(temp[1]-1)/2);    return (count); } int main(){    int arr[] = {2, 1, 4, 2};    int n = sizeof (arr) / sizeof (arr[0]);    cout<<"The count of Subarrays with even sum is "<<countEvenSumSubArray(arr, n);    return (0); }

आउटपुट

The count of Subarrays with even sum is 4

  1. - C++ में दो स्ट्रिंग्स को समान बनाने के लिए दिए गए ऑपरेशन के न्यूनतम नंबर

    समस्या कथन दो स्ट्रिंग्स str1 और str2 दी गई हैं, दोनों में a और b वर्ण हैं। दोनों स्ट्रिंग्स समान लंबाई की हैं। दोनों स्ट्रिंग्स में एक _ (खाली स्थान) है। पहले स्ट्रिंग को दूसरी स्ट्रिंग में बदलने के लिए निम्न ऑपरेशन का उपयोग करके न्यूनतम ऑपरेशन की संख्या ढूंढें: यदि _ स्थिति i पर है तो _ को स्

  1. - C++ में परिमेय संख्याओं का LCM खोजें

    यहां हम देखेंगे कि परिमेय संख्याओं का LCM कैसे निकाला जाता है। हमारे पास परिमेय संख्याओं की एक सूची है। मान लीजिए सूची है {2/7, 3/14, 5/3}, तो LCM 30/1 होगा। इस समस्या को हल करने के लिए, हमें सभी अंशों (numerators) का LCM और सभी हरों (denominators) का GCD निकालना होगा, फिर परिमेय संख्याओं का LCM होग

  1. - C++ प्रोग्राम: मैट्रिक्स में दो सेल के बीच पथ है या नहीं जांचना

    इस लेख में, हम एक प्रोग्राम पर चर्चा करेंगे जो दिए गए मैट्रिक्स में दो सेल के बीच पथ मौजूद है या नहीं जांचता है। मान लीजिए हमें एक वर्ग मैट्रिक्स दिया गया है जिसमें संभावित मान 0, 1, 2 और 3 हैं। यहां, 0 का अर्थ है खाली दीवार 1 का अर्थ है स्रोत 2 का अर्थ है गंतव्य 3 का अर्थ है खाली सेल मैट्रिक्स म