কম্পিউটার

C++ এ একটি গ্রিডে ম্যাজিক স্কোয়ার গণনা করুন


আমাদেরকে সংখ্যার ম্যাট্রিক্স দেওয়া হয়েছে। লক্ষ্য হল প্রদত্ত ম্যাট্রিক্সের মধ্যে উপস্থিত ম্যাজিক স্কোয়ারের সংখ্যা খুঁজে বের করা।

একটি ম্যাজিক স্কোয়ার, যদি একটি ম্যাট্রিক্স হিসাবে নেওয়া হয়, একটি 3X3 ম্যাট্রিক্স যাতে সুডোকুতে একটি গ্রিডের মতো 1 থেকে 9 পর্যন্ত উপাদান থাকে। বৈশিষ্ট্য হল −

  • সমস্ত সংখ্যা একবারই আসে।
  • ম্যাট্রিক্সের সমস্ত 9টি ঘরের যোগফল হল 45।
  • 3 এর প্রতিটি সারির যোগফল হল 15।
  • 3টির প্রতিটি কলামের যোগফল হল 15।
  • 3 এর কর্ণের যোগফল হল 5।
  • এই ধরনের যোগফল পেতে, 5 সবসময় উভয় কর্ণের মাঝখানে থাকে।

ইনপুট

int arr[][]= { { 1,2,3,0 }, { 4,5,6,1 }, { 7,8,9,0 } };

আউটপুট

Magic Squares present: 0

ব্যাখ্যা

বোঝার জন্য একটি ম্যাট্রিক্স ফর্ম তৈরি করা
1 2 3 0
4 5 6 1
7 8 9 0

সমস্ত উপাদান 1 থেকে 9 এর মধ্যে এবং অনন্য। কিন্তু,

1+2+3=6 !=4+5+6=15 !=7+8+9=23

এছাড়াও কর্ণের যোগফল 15 এর সমান নয়।

ইনপুট

arr[][]= { { 1,2,3,0 }, { 4,5,6,1 }, { 7,8,9,0 } };

আউটপুট

Magic Squares present : 1

ব্যাখ্যা

বোঝার জন্য একটি ম্যাট্রিক্স ফর্ম তৈরি করা
1 6 8 4
8 1 6 0
3 5 7 1
4 9 2 0

সমস্ত সংখ্যা অনন্য এবং 1 থেকে 9 এর মধ্যে।

সারি যোগফল, 8+1+6=3+5+7=4+9+2=15

কলামের যোগফল, 8+3+4=1+5+9=6+7+2=15

কর্ণের যোগফল, 8+5+2=4+5+6=15

এছাড়াও 1 থেকে 9 যোগ করলে আমরা 45 পাই এবং 5 উভয় কর্ণের মাঝখানে।

নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • পূর্ণসংখ্যা অ্যারে গ্রিড[][] সংখ্যা, সারি এবং কল এর মাত্রা সংরক্ষণ করে।

  • ফাংশন ম্যাজিকস্কোয়ার (int a, int b…..int i) 9টি উপাদান ইনপুট হিসাবে নেয় এবং এটি ম্যাজিক স্কোয়ার তৈরি করে কিনা তা পরীক্ষা করে। ম্যাজিক স্কোয়ার হলে 1 ফেরত দেয়, অন্যথায় 1 ফেরত দেয়।

  • এখানে আমরা সমস্ত প্যারামিটার সংরক্ষণ করার জন্য অ্যারে অ্যারে[9] নেব এবং সেগুলি অনন্য কিনা তা পরীক্ষা করে পরীক্ষা করে দেখব যে তারা এতে অনন্য কোষগুলি দখল করে আছে। যদি একটি কক্ষ গণনা <1 মানে নেই। 1 থেকে 9 এর মধ্যে নয়, অথবা যদি গণনা>1 হয় তাহলে না। অনন্য নয়। পতাকা সেট করুন=0

  • যদি পতাকা 1 হয় তবে আমরা সারি, কলাম, তির্যক যোগফল 15 হিসাবে পরীক্ষা করব৷ যদি সত্য হয় তবে এটি অমিত বর্গক্ষেত্র৷ 1 ফেরত দিন অন্য 0 ফেরত দিন৷

  • ফাংশন countSquares (int G[3][4],int R, int C) একটি গ্রিড নেয়, এর সারি এবং কলামগুলি ইনপুট হিসাবে নেয় এবং সংখ্যা গণনা করে। এতে উপস্থিত ম্যাজিক স্কোয়ার।

  • এই ধরনের বর্গক্ষেত্রের সংখ্যা গণনা সংরক্ষণ করতে গণনা ব্যবহার করা হয়।

  • প্রথম উপাদান থেকে সারি-2, কোল-2 ( 3X3 ম্যাট্রিক্স) পর্যন্ত যাত্রা শুরু করুন

  • যদি তির্যক G[i+1][j+1] এর মাঝখানে 5 না হয় তাহলে ম্যাজিক বর্গ করা সম্ভব নয়, বর্তমান পুনরাবৃত্তি এড়িয়ে যান।

  • অন্যথায় magicSquare ( int a থেকে i ) এ পাস করে 9টি উপাদানের জন্য পরীক্ষা করুন

  • G[i][j] সহ সকল 9টি উপাদান হল G[i+1][j], G[i+2][j],G[i+1][j+1],G[i][j] +1],G[i][j+2],G[i+2][j+2],G[i+2][j+1], G[i+1][j+2]

  • যদি এটি 1 বৃদ্ধি গণনা প্রদান করে।

  • শেষ পর্যন্ত কাঙ্খিত ফলাফল হিসাবে গণনা করুন।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
// to check is subgrid is Magic Square
int magicSquare(int a, int b, int c, int d, int e,
int f, int g, int h, int i){
   int flag=1; // to mark all numbers are unique and between 1 to 9
   int arr[9]={0};
   arr[a-1]++;
   arr[b-1]++;
   arr[c-1]++;
   arr[d-1]++;
   arr[e-1]++;
   arr[f-1]++;
   arr[g-1]++;
   arr[h-1]++;
   arr[i-1]++;
   for(int i=0;i<9;i++)
      if(arr[i]>1 || arr[i]<1) //every number occurs exactly once{
         flag=0;
         break;
   }
   // checking all sums as 15
   if (flag==1 && (a + b + c) == 15 && (d + e + f) == 15 && (g + h + i) == 15 && (a + d + g) == 15 &&(b + e + h) == 15 && (c + f + i) == 15 &&(a + e + i) == 15 && (c + e + g) == 15)
   return 1;
   return 0;
}
int countSquares(int G[3][4],int R, int C){
   int count = 0;
   for (int i = 0; i < R - 2; i++)
      for (int j = 0; j < C - 2; j++) {
         if (G[i + 1][j + 1] != 5)
            continue;
      int ismagic=magicSquare(G[i][j], G[i][j + 1], G[i][j + 2], G[i + 1][j], G[i + 1][j + 1],
      G[i + 1][j + 2], G[i + 2][j], G[i + 2][j + 1], G[i + 2][j + 2]);
      // check for magic square subgrid
      if (ismagic==1)
         count++;
      }
      return count;
}
int main(){
   int Grid[3][4] = { { 4, 3, 8, 4 },{ 9, 5, 1, 9 },{ 2, 7, 6, 2 } };
   int row=3;
   int col=4;
   cout <<"Count of Magic Squares in Grid: "<<countSquares(Grid,row,col);
   return 0;
}

আউটপুট

Count of Magic Squares in Grid: 1

  1. C++ এ একটি গ্রিডে প্রদত্ত দিকের সম্ভাব্য চালগুলি গণনা করুন

  2. C++ এ একটি সমতলে সমান্তরালগ্রামের গণনা

  3. C++ এ একটি আয়তক্ষেত্রে বর্গক্ষেত্রের সংখ্যা গণনা করুন

  4. একটি অ্যারেতে ইনভার্সন গণনা করার জন্য C++ প্রোগ্রাম