इस समस्या में एक संख्यात्मक मोबाइल कीपैड दिया जाता है। हम वर्तमान बटन के केवल ऊपर, नीचे, दाएं और बाएं बटन दबा सकते हैं, विकर्ण कुंजियों की अनुमति नहीं है। हम कीपैड में * और # बटन भी नहीं दबा सकते।
एक अंक दिया गया है, हमें दिए गए नियमों को बनाए रखते हुए, कीपैड का उपयोग करके दिए गए अंकों की संभावित संख्याओं की संख्या ज्ञात करनी है।
इनपुट और आउटपुट
<पूर्व>इनपुट:अंक गणना। 3 अंकों की संख्या कहें। आउटपुट:संभावित 3 अंकों की संख्या, जो दी गई शर्तों के साथ बनाई जा सकती है। यहाँ उत्तर 138 है।एल्गोरिदम
getCount(n)
इनपुट: अंकों की संख्या n.
आउटपुट: मोबाइल कीपैड में n अंकों की संख्या टाइप करने के संभावित तरीके।
शुरू करें यदि n <=0 है, तो n =1 पर 0 लौटाएं, फिर 10 दो सरणी पंक्ति को परिभाषित करें और वर्तमान कुंजी से प्रत्येक दिशा को स्थानांतरित करने के लिए कॉल करें आकार की गणना तालिका (10 x n + 1) को श्रेणी में i के लिए परिभाषित करें 0 से 9, गिनें [i, 0]:=0 काउंट [i, 1]:=1 k के लिए 2 से n तक किया गया, i के लिए 0 से 3 की सीमा में, j के लिए 0 से 2 की सीमा में करें, यदि कुंजी [i, j] ≠ * या # करें, तो num:=key[i, j] count[num, k] :=0 सभी संभावित चालों के लिए, rowMove करें:=i + row[move] colMove :=j + col[move] अगर rowMove in (0..3) colMove in (0..2), और key * या #, तो nextNum :=key[rowMove, colMove] count[num, k] :=count [संख्या, के] + गिनती [अगली संख्या, के + 1] किया गया कुल किया गया कुल गणना:=0 के लिए मैं 1 से 9 की सीमा में, कुल गणना करें:=कुल गणना + गिनती [i, n] किया गया कुल गणना समाप्त करें
उदाहरण
#includeनेमस्पेस का उपयोग करना एसटीडी;चार कीपैड[4][3] ={{'1','2','3'}, {'4','5','6'}, {'7', '8', '9'}, {'*', '0', '#'}}; int getCount (int n) { अगर (कीपैड ==NULL || n <=0) रिटर्न 0; अगर (एन ==1) वापसी 10; // 1 अंक संख्या 0-9 पूर्णांक पंक्ति [] ={0, 0, -1, 0, 1}; // ऊपर और नीचे पंक्ति बदल जाएगी int col[] ={0, -1, 0, 1, 0}; // बाएं और दाएं कॉलम के लिए इंट काउंट बदल जाएगा [10] [एन + 1]; // i और लंबाई j int move =0, rowMove =0, colMove =0, num =0; इंट नेक्स्टनम =0, टोटलकाउंट =0; के लिए (int i=0; i<=9; i++) {//लंबाई 0 और 1 गिनती के लिए[i][0] =0; गिनती [i] [1] =1 } के लिए (int k=2; k<=n; k++) {//अंक 2 से n के लिए (int i=0; i<4; i++ ) {//पंक्ति के लिए के लिए बुद्धिमान (int j=0; j<3; j++) {// कॉलम वार के लिए अगर (कीपैड[i][j]!='*' &&कीपैड[i][j]!='#') { / /कुंजी * नहीं हैं और # अंक =कीपैड[i][j] - '0'; // कैरेक्टर काउंट से नंबर पाएं [num] [k] =0; के लिए (चाल =0; चाल <5; चाल ++) {rowMove =i + पंक्ति [चाल]; // रो मूविंग मैट्रिक्स का उपयोग करके मूव करें colMove =j + col [move]; // कॉलम मूविंग मैट्रिक्स का उपयोग करके मूव करें अगर (rowMove>=0 &&rowMove <=3 &&colMove>=0 &&colMove <=2 &&कीपैड[rowMove][colMove] !='*' &&keypad[rowMove][colMove] ! ='#') {नेक्स्टनम =कीपैड [रोमोव] [कोलमोव] - '0'; // अगली संख्या की गणना करें [संख्या] [के] + =गिनती [अगली संख्या] [के -1]; } } } } } } कुल गणना =0; for (int i=0; i<=9; i++) // i TotalCount +=count[i][n]; से शुरू होने वाली संख्या के लिए; कुल वापसी;} int मुख्य () { int n; cout <<"अंकों की संख्या:"; सिनेमा>> एन; cout <<"संभावित संयोजन:" < आउटपुट
अंकों की संख्या:3 संभावित संयोजन:138