इस समस्या में, हमें एक संख्या दी गई है और हमें उन सभी शब्दों को प्रिंट करना है जो पुराने जमाने के मोबाइल कीबोर्ड पर उन अंकों को दबाकर बनाए जा सकते हैं।
हम आज उपयोग होने वाले QWERTY कीबोर्ड स्टाइल से भली-भांति परिचित हैं। लेकिन QWERTY कीपैड फोन के आविष्कार से पहले, फोन 12 बटनों वाले कीपैड से लैस होते थे और प्रत्येक बटन में शब्द और संख्याएं दोनों होती थीं। जैसे कीपैड पर अंक 6 में "MNO" शब्द होंगे जिन्हें कुंजी को एक, दो या तीन बार क्लिक करके टाइप किया जाता था।
कीपैड इस तरह दिखता था -
| 1 | 2 ABC | 3 DEF |
| 4 GHI | 5 JKL | 6 MNO |
| 7 PQRS | 8 TUV | 9 WXYZ |
| * | 0 | # |
इन कीवर्ड्स में भी सभी शब्द मौजूद होते हैं और उपयोगकर्ता उन्हें टाइप कर सकता है। इसलिए, इस समस्या में, हम दिए गए संख्या अनुक्रम का उपयोग करके उत्पन्न होने वाले सभी संभावित शब्दों को प्रिंट करेंगे।
समस्या को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं -
इनपुट: 687 आउटपुट: 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
इस समस्या को हल करने के लिए, आइए उपरोक्त उदाहरण में बने पैटर्न को देखें। प्रत्येक बटन के अपने संबद्ध वर्ण होते हैं और हमें टाइपिंग करते समय उनका उपयोग करना होगा। इसलिए, प्रत्येक संख्या के लिए, अधिकतम 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