কম্পিউটার

মোবাইল নিউমেরিক কিপ্যাড সমস্যা


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

মোবাইল নিউমেরিক কিপ্যাড সমস্যা

একটি ডিজিট দেওয়া হয়, প্রদত্ত নিয়মগুলি বজায় রেখে কীপ্যাড ব্যবহার করে প্রদত্ত সংখ্যাগুলির সম্ভাব্য সংখ্যার সংখ্যা আমাদের খুঁজে বের করতে হবে৷

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

Input:
Digit count. Say 3 digit numbers.
Output:
Number of possible 3 digit numbers, that can be formed with the given conditions. Here the answer is 138.

অ্যালগরিদম

getCount(n)

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

Begin
   if n <= 0, then
      return 0
   if n = 1, then
      return 10

   define two array row and col to move each direction from current key
   define count table of size (10 x n+1)

   for i in range 0 to 9, do
      count[i, 0] := 0
      count[i, 1] := 1
   done

   for k in range 2 to n, do
      for i in range 0 to 3, do
         for j in range 0 to 2, do
            if key[i, j] ≠ * or #, then
               num := key[i, j]
               count[num, k] := 0
               for all possible moves, do
                  rowMove := i + row[move]
                  colMove := j + col[move]
                  if rowMove in (0..3) colMove in (0..2), and key ≠ * or #, then
                     nextNum := key[rowMove, colMove]
                     count[num, k] := count[num, k] + count[nextNum, k+1]
               done
         done
      done
   done

   totalCount := 0
   for i in range 1 to 9, do
      totalCount := totalCount + count[i, n]
   done

   return totalCount
End

উদাহরণ

#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;       //1 digit number 0-9

   int row[] = {0, 0, -1, 0, 1};           //for up and down the row will change

   int col[] = {0, -1, 0, 1, 0};           //for left and right column will change

   int count[10][n+1];                    //store count for starting with i and length j
   int move=0, rowMove=0, colMove=0, num = 0;
   int nextNum=0, totalCount = 0;

   for (int i=0; i<=9; i++) {                 //for length 0 and 1
      count[i][0] = 0;
      count[i][1] = 1
   }

   for (int k=2; k<=n; k++) {                   //for digits 2 to n
      for (int i=0; i<4; i++ ) {                 //for Row wise
         for (int j=0; j<3; j++) {              // for column wise
            if (keypad[i][j] != '*' && keypad[i][j] != '#') {   //keys are not * and #
               num = keypad[i][j] - '0';                //find the number from the character
               count[num][k] = 0;

               for (move=0; move<5; move++) {
                  rowMove = i + row[move];          //move using row moving matrix
                  colMove = j + col[move];          //move using column moving matrix
                  if (rowMove >= 0 && rowMove <= 3 && colMove >=0 && colMove <= 2 &&
                     keypad[rowMove][colMove] != '*' && keypad[rowMove][colMove] != '#') {
                        nextNum = keypad[rowMove][colMove] - '0';        //find next number
                        count[num][k] += count[nextNum][k-1];
                  }
               }
            }
         }
      }
   }

   totalCount = 0;
   for (int i=0; i<=9; i++)             //for the number starting with 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. ভার্টেক্স কভার সমস্যা

  2. নোমপ্যাড নেই? সমস্যা নেই! উইন্ডোজে একটি সংখ্যাসূচক কীপ্যাড কীভাবে পাবেন

  3. সাংখ্যিক কীপ্যাড উইন্ডোজ 10 এ কাজ করছে না [সমাধান]

  4. কিভাবে উইন্ডোজ ল্যাপটপে সাংখ্যিক কীপ্যাড পাবেন এবং ব্যবহার করবেন