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

মোবাইল Нуমেরিক কীপ্যাড সমস্যা (Mobile Numeric Keypad Problem)

এই সমস্যায় একটি Нуমেরিক মোবাইল কীপ্যাড দেওয়া আছে। আমরা শুধু বর্তমান বাটনের উপরে, নিচে, ডানে এবং বামে থাকা বাটন চাপতে পারি, ডায়াগোনাল কীগুলো অনুমোদিত নয়। কীপ্যাডের * এবং # বাটনও চাপা যাবে না।

মোবাইল Нуমেরিক কীপ্যাড সমস্যা (Mobile Numeric Keypad Problem)

একটি অঙ্ক দেওয়া আছে, আমাদের উক্ত নিয়মাবলী মেনে কীপ্যাড ব্যবহার করে সেই অঙ্কের কতগুলো সম্ভাব্য সংখ্যা তৈরি করা যায় তা বের করতে হবে।

ইনপুট এবং আউটপুট

ইনপুট: অঙ্কের সংখ্যা। ধরা যাক ৩ অঙ্কের সংখ্যা।
আউটপুট: দেওয়া শর্তাবলী মেনে তৈরি সম্ভাব্য ৩ অঙ্কের সংখ্যা। এখানে উত্তর ১৩৮।

অ্যালগরিদম

getCount(n)

ইনপুট: অঙ্কের সংখ্যা n।
আউটপুট: মোবাইল কীপ্যাডে n অঙ্কের সংখ্যা তৈরির সম্ভাব্য উপায়।

শুরু
  যদি n <= 0 হয়, তবে ফেরত দিন 0
  যদি n = 1 হয়, তবে ফেরত দিন ১০
  প্রতিটি দিক থেকে বর্তমান কী থেকে যেতে row এবং col অ্যারে সংজ্ঞায়িত করুন
  10 x (n+1) আকারের count টেবিল সংজ্ঞায়িত করুন
  i := 0 থেকে 9 পর্যন্ত, করুন
    count[i, 0] := 0
    count[i, 1] := 1
  끝난
  k := 2 থেকে n পর্যন্ত, করুন
    i := 0 থেকে 3 পর্যন্ত, করুন
      j := 0 থেকে 2 পর্যন্ত, করুন
        যদি key[i, j] ≠ * বা # হয়, তবে
          num := key[i, j]
          count[num, k] := 0
          সকল সম্ভাব্য 무ভ move জন্য, করুন
            rowMove := i + row[move]
            colMove := j + col[move]
            যদি rowMove (0..3) এবং colMove (0..2) এ থাকে এবং key ≠ * বা #, তবে
              nextNum := key[rowMove, colMove]
              count[num, k] := count[num, k] + count[nextNum, k-1]
          끝난
        끝난
      끝난
    끝난
  끝난
  totalCount := 0
  i := 1 থেকে 9 পর্যন্ত, করুন
    totalCount := totalCount + count[i, n]
  끝난
  totalCount ফেরত দিন
শেষ

উদাহরণ (C++)

#include <iostream>
using namespace std;

char keypad[4][3] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};

int getCount(int n) {
  if(keypad == NULL || n <= 0) return 0;
  if(n == 1) return 10;
  int row[] = {0, 0, -1, 0, 1};
  int col[] = {0, -1, 0, 1, 0};
  int count[10][n+1];
  int move=0, rowMove=0, colMove=0, num = 0;
  int nextNum=0, totalCount = 0;
  for (int i=0; i<=9; i++) {
    count[i][0] = 0;
    count[i][1] = 1;
  }
  for (int k=2; k<=n; k++) {
    for (int i=0; i<4; i++) {
      for (int j=0; j<3; j++) {
        if (keypad[i][j] != '*' && keypad[i][j] != '#') {
          num = keypad[i][j] - '0';
          count[num][k] = 0;
          for (move=0; move<5; move++) {
            rowMove = i + row[move];
            colMove = j + col[move];
            if (rowMove >= 0 && rowMove <= 3 && colMove >=0 && colMove <= 2 &&
                keypad[rowMove][colMove] != '*' && keypad[rowMove][colMove] != '#') {
              nextNum = keypad[rowMove][colMove] - '0';
              count[num][k] += count[nextNum][k-1];
            }
          }
        }
      }
    }
  }
  totalCount = 0;
  for (int i=0; i<=9; i++)
    totalCount += count[i][n];
  return totalCount;
}

int main() {
  int n;
  cout << "Number of digits: "; cin >> n;
  cout << "Possible Combinations: " << getCount(n);
}

আউটপুট

Number of digits: 3
Possible Combinations: 138
  1. ভার্টেক্স কভার সমস্যা (Vertex Cover Problem)

  2. নাম্বার প্যাড নেই? সমস্যা নেই! উইন্ডোজে নাম্বারিক কিপ্যাড পাওয়ার উপায়

  3. Windows 10-এ ন্যামেরিক কিপ্যাড কাজ না করছে? দ্রুত সমাধান

  4. Windows ল্যাপটপে न्यুমেরিক কীপ্যাড এক্টিভেট ও ব্যবহার করুন