以前作過九宮格輸入法的題目ios
搜了一下網上的解法沒找到高效的解法算法
寫一個相對高效的解法佈局
先放上原題spa
假設有九宮格輸入法鍵盤佈局以下: [ 1,.?! ] [ 2ABC ] [ 3DEF ] [ 4GHI ] [ 5JKL ] [ 6MNO ] [ 7PQRS ] [ 8TUV ] [ 9WXYZ ] [ 0空 ] 注意:中括號[ ]僅爲了表示鍵盤的分隔,不是輸入字符。 每一箇中括號中,位於首位的數字字符便是鍵盤的按鍵,按一下便可輸入該數字字符。 屢次按同一個鍵,則輸入的字符依次循環輪流,例如按兩次3,則輸入D; 按5次7,則輸入S;按6次2,則輸入A。按鍵0的輸入組合是0和空格字符,即按兩次0輸入空格。 你須要對於給定的按鍵組合,給出該組合對應的文本。 輸入格式: 輸入在一行中給出數個字符的按鍵組合(例如 999 表示按3次9), 每一個字符的按鍵組合之間用空格間隔,最後一個輸入法組合以後以換行結束。 輸入數據至少包括一個字符的按鍵組合,且輸入總長度不超過500個字符。 輸出格式: 在一行中輸出該按鍵組合對應的文本。 輸入樣例: 22 5555 22 666 00 88 888 7777 4444 666 44 輸出樣例: ALAN TURING
首先直接以數字讀入確定會爆 題中給出了總長度不超過500code
一種很直接的思路是每次讀一個字符,遇到空格作一個統計,而後根據統計的個數輸出結果。blog
但既然每組輸入都是相同的數字,那用字符串處理起來可能會更方便ci
這裏放上個人算法字符串
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 const string keys[10] = { 6 "0 ", 7 "1,.?!","2ABC","3DEF", 8 "4GHI","5JKL","6MNO", 9 "7PQRS","8TUV","9WXYZ", 10 }; 11 12 int main() { 13 string str; 14 while (cin >> str) { // 從流中讀取輸入信息 15 string key = keys[str[0] - '0']; // 按鍵 16 int counts = (str.size() - 1) % key.size(); // 按下次數 17 cout << key[counts]; // 輸出 18 } 19 return 0; 20 }
能夠說是鑽了題目的空子。字符串處理