Computer >> Máy Tính >  >> Lập trình >> C ++

In tất cả các từ có thể có từ các số điện thoại trong C ++


Trong bài toán này, chúng ta được cung cấp một số và chúng ta phải in tất cả các từ có thể được tạo thành bằng cách nhấn các từ đó trong bàn phím di động kiểu cũ.

Chúng ta đã khá quen thuộc với kiểu bàn phím QWERTY mà chúng ta sử dụng ngày nay. Nhưng trước khi phát minh ra bàn phím QWERTY, điện thoại được trang bị bàn phím với 12 nút và mỗi nút đều chứa cả chữ và số. Giống như từ 6 trên bàn phím sẽ chứa các từ “MNO” sẽ được nhập bằng cách nhấp một, hai lần hoặc ba lần vào phím.

Bàn phím trông như thế này -

1 2
ABC
3
DEF
4
GHI
5
JKL
6
MNO
7
PQRS
8
TUV
9
WXYZ
* 0 #

Trong các từ khóa này, tất cả các từ đều có mặt và người dùng có thể nhập sau đó. Vì vậy, trong vấn đề này, chúng tôi sẽ in ra tất cả các từ có thể có thể được tạo ra bằng cách sử dụng dãy số đã cho.

Hãy lấy một ví dụ để hiểu rõ vấn đề hơn -

Input: 687
Output: MTP, MTQ, MTR, MTR, MUP, MUQ, MUR, MUS, MVP, MVQ,
MVR, MVR, NTP, NTQ, NTR, NTR, NUP, NUQ, NUR, NUS, NVP, NVQ,
NVR, NVR, OTP, OTQ, OTR, OTR, OUP, OUQ, OUR, OUS, OVP, OVQ,
OVR, OVR.

Để giải quyết vấn đề này, hãy xem mẫu được tạo trong ví dụ trên. Mỗi nút có các ký tự liên kết riêng và chúng ta sẽ phải sử dụng các ký tự đó trong khi nhập. Vì vậy, đối với mỗi số, có tối đa 4 tùy chọn (bao gồm 7 và 9). Đối với điều này, chúng tôi có thể sửa chữa trên chữ số và sau đó sử dụng chữ số và các từ được tạo ra. Điều này có thể được thực hiện bằng cách sử dụng đệ quy.

Cho phép chúng tôi lập trình để triển khai khái niệm bằng cách sử dụng đệ quy.

Ví dụ

#include <iostream>
#include <string.h>
using namespace std;
const char keypad[10][5] = {"", "", "abc", "def", "ghi", "jkl", "mno",
"pqrs", "tuv", "wxyz"};
void printWords(int number[], int curr_digit, char output[], int n){
   int i;
   if (curr_digit == n){
      cout<<output<<" ";
      return ;
   }
   for (i=0; i<strlen(keypad[number[curr_digit]]); i++){
      output[curr_digit] = keypad[number[curr_digit]][i];
      printWords(number, curr_digit+1, output, n);
      if (number[curr_digit] == 0 || number[curr_digit] == 1)
         return;
   }
}
int main(void){
   int number[] = {6,8,7};
   cout<<"The output character formed is : \n";
   int n = sizeof(number)/sizeof(number[0]);
   char result[n+1];
   result[n] ='\0';
   printWords(number, 0, result, n);
   return 0;
}

Đầu ra

Ký tự đầu ra được hình thành là -

mtp mtq mtr mts mup muq mur mus mvp mvq mvr mvs ntp ntq ntr nts
nup nuq nur nus nvp nvq nvr nvs otp otq otr ots oup ouq our ous ovp
ovq ovr ovs