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

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

আমাদের একটি ম্যাট্রিক্স দেওয়া আছে। লক্ষ্য হলো সেই ম্যাট্রিক্সের ভেতর কতগুলো ম্যাজিক স্কোয়ার আছে তা বের করা।

ম্যাজিক স্কোয়ার: ৩x৩ ম্যাট্রিক্স যেটিতে ১ থেকে ৯ পর্যন্ত সংখ্যা একবার করে থাকে (সুডোকু гриডের মতো)। বৈশিষ্ট্য:

  • সকল সংখ্যা ঠিক একবার।
  • ৯টি সেলের যোগফল ৪৫।
  • প্রতিটি সারি (৩টি) এর যোগফল ১৫।
  • প্রতিটি কলাম (৩টি) এর যোগফল ১৫।
  • প্রতিটি ডায়াগোনালের যোগফল ১৫।
  • ৫ সবসময় দুটি ডায়াগোনালের মাঝপথে থাকে।

ইনপুট

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

আউটপুট

Magic Squares present: 0

ব্যাখ্যা: সব উপাদান ১-৯ এবং ইউনিক। কিন্তু সারির যোগফল: ১+২+৩=৬ ≠ ৪+৫+৬=১৫ ≠ ৭+৮+৯=২৪। ডায়াগোনালও ১৫ নয়।

ইনপুট

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

আউটপুট

Magic Squares present : 1

ব্যাখ্যা: সব সংখ্যা ইউনিক ১-৯। সারি, কলাম, ডায়াগোনাল সবका যোগফল ১৫। মাঝপথে ৫।

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

  • Grid[][] ম্যাট্রিক্স, row, col ডাইমেনশন।
  • magicSquare(int a...i) ফাংশন ৯টি এলিমেন্ট নিয়ে ম্যাজিক স্কোয়ার কিনা চেক করে ১/০ রিটার্ন।
  • arr[9] দিয়ে ইউনিকনেস চেক (১-৯ রেঞ্জে এবং প্রতিটি একবার)।
  • সারি, কলাম, ডায়াগোনাল যোগফল ১৫ কিনা চেক।
  • countSquares(int G[3][4], int R, int C) ফাংশন গ্রিডে ৩x৩ সাবগ্রিড সবচেক করে কাউন্ট।
  • মাঝপথে ৫ নাইলে স্কিপ।
  • ৯টি এলিমেন্ট magicSquare-এ পাস করে রেজাল্ট কাউন্ট।

উদাহরণ কোড

#include <bits/stdc++.h>
using namespace std;

int magicSquare(int a, int b, int c, int d, int e, int f, int g, int h, int i){
    int flag = 1;
    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) { flag = 0; break; }
    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]);
            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, 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. সি++-এ আয়তক্ষেত্রে বর্গের সংখ্যা গণনা

  4. C++ প্রোগ্রাম: অ্যারেতে ইনভার্শন কাউন্ট করা