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

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

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

रूपांतरण एक मैट्रिक्स हैं -

  • दो आव्यूहों में से कोई भी मैट्रिक्स चुनें।

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

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

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

mat1[][] = {{1 2}
{2 1}}
mat1[][] = {{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

कुशल तरीका

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

हम सरणी के मॉड्यूलो में 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 ज्ञात कीजिए

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

  1. मैट्रिक्स में दो कोशिकाओं के बीच पथ है या नहीं, यह जानने के लिए सी ++ प्रोग्राम

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