কম্পিউটার টিউটোরিয়াল

C++-এ ম্যাট্রিক্সে বিজোড় ভ্যালুવાલা সেল গণনা


ধরুন n এবং m হল একটি ম্যাট্রিক্সের ডাইমেনশন। এগুলো শূন্য দিয়ে ইনিশিয়ালাইজড। এবং indices দেওয়া আছে যেখানে indices[i] = [ri, ci]। প্রতিটি [ri, ci] পেয়ারের জন্য ri রো এবং ci কলামের সব সেল ১ দিয়ে ইনক্রিমেন্ট করতে হবে। আউটপুট হবে সব indices-এ ইনক্রিমেন্ট প্রয়োগ করার পর ম্যাট্রিক্সে বিজোড় ভ্যালুвых সেলগুলোর সংখ্যা।

এটি সমাধানের জন্য, আমরা নিচের ধাপগুলো অনুসরণ করব −

  • odd := 0 ইনিশিয়ালাইজ করুন, এবং x := ম্যাট্রিক্সের রো কাউন্ট
  • একটি ম্যাট্রিক্স mat তৈরি করুন
  • for i in range 0 to x
    • r = input[i, 0], c = input[i, 1],
    • for j in range 0 to m – 1
      • mat[r, j] := mat[r, j] + 1
    • for j in range 0 to n – 1
      • mat[j, c] := mat[j, c] + 1
  • for i in range 0 to n – 1
    • for j := 0 to m – 1
      • odd := odd + mat[i, j] বিটওয়াইজ OR with 1
  • return odd

উদাহরণ

বুঝতে নিচের ইমপ্লিমেন্টেশনটি দেখুন −

#include <bits/stdc++.h> using namespace std; class Solution {    public:       int oddCells(int n, int m, vector<vector<int>>& in) {       int odd = 0;       int x = in.size();       vector < vector <int> > mat(n, vector <int>(m));       for(int i = 0; i < x ;i++){          int r = in[i][0];          int c = in[i][1];          for(int j = 0; j < m; j++){             mat[r][j]++;          }          for(int j = 0; j < n; j++){             mat[j][c]++;          }       }       for(int i = 0; i < n; i++){          for(int j = 0; j < m; j++)odd += mat[i][j] & 1;       }       return odd;    } }; main(){    Solution ob;    vector<vector<int>> c = {{0,1},{1,1}};    cout << ob.oddCells(2,3,c); }

ইনপুট

2 3 {{0,1},{1,1}}

আউটপুট

6

  1. সি++-এ স্পায়রাল ম্যাট্রিক্স III (Spiral Matrix III)

  2. C++ ব্যবহার করে ম্যাট্রিক্সে সর্বোচ্চ যোগফল করা কলাম বের করা

  3. C++-এ ম্যাট্রিক্সে দেওয়া গুণফলের জোড়া আছে কিনা চেক করা

  4. C++-এ একটি ম্যাট্রিক্স ইনভার্টিবল (Invertible) কিনা চেক করা