C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で電話の数字から可能なすべての単語を印刷します


この問題では、番号が与えられ、昔ながらのモバイルキーボードでそれらの単語を押すことによって形成できるすべての単語を印刷する必要があります。

私たちは、今日使用しているQWERTYキーボードスタイルに精通しています。しかし、QWERTYキーパッドが発明される前は、12個のボタンが付いたキーパッドが取り付けられており、各ボタンには単語と数字の両方が含まれていました。キーパッドの単語6には、「MNO」という単語が含まれ、キーを1回、2回、または3回クリックして入力します。

キーパッドは次のようになりました-

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

これらのキーワードにはすべての単語が含まれており、ユーザーはその単語を入力できます。したがって、この問題では、与えられた数列を使用して生成できるすべての可能な単語を出力します。

問題をよりよく理解するために例を見てみましょう-

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.

この問題を解決するために、上記の例で作成されたパターンを見てみましょう。各ボタンには独自の関連文字があり、入力時にそれらを使用する必要があります。したがって、番号ごとに、最大4つのオプションがあります(7と9の場合)。このために、数字を修正してから、数字と生成された単語を使用できます。これは、再帰を使用して実行できます。

再帰を使用して概念を実装するプログラムを作成しましょう。

#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;
}

出力

形成される出力文字は-

です。
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

  1. C++でリーフノードから距離kにあるすべてのノードを出力します

    この問題では、二分木と数Kが与えられます。葉のノードからkの距離にある木のすべてのノードを印刷する必要があります。 二分木 は、各ノードに最大2つのノード(1/2 /なし)がある特別なツリーです。 リーフノード 二分木のは、ツリーの最後にあるノードです。 この問題では、リーフノードからの距離はリーフノードよりも高いレベルのノードです。レベル4のリーフノードから距離2のノードがレベル2になるとします。 問題を理解するために例を見てみましょう K =2 出力 − 6 9. この問題を解決するために、ツリーをトラバースします。すべては、リーフノードに到達するレベルごとにすべて

  2. 特定のソースから宛先までのすべてのパスをC++で出力します

    この問題では、有向グラフが与えられ、グラフのソースから宛先までのすべてのパスを印刷する必要があります。 有向グラフ は、頂点aからbに向けられたエッジを持つグラフです。 問題を理解するために例を見てみましょう ソース=K宛先=P 出力: K -> T -> Y -> A -> P K -> T -> Y -> P K -> A -> P ここで、KからPへのパスを見つけました。パスをトラバースし、KからPに向かうすべてのパスを出力しました。 この問題を解決するために、深さ優先探索を使用してグラフをトラバースします。