Data je niska cifara sastavljena od cifara 0–9. Svaka cifra predstavlja skup slova kao na klasičnoj telefonskoj tastaturi:
0: (razmak)1: `` (prazno)2: abc3: def4: ghi5: jkl6: mno7: pqrs8: tuv9: wxyzPotrebno je da generisati sve moguće niske koje nastaju tako što za svaku cifru iz ulaza izaberete po jedno slovo iz njenog skupa. Rezultate ispisati u strogo rastućem leksikografskom poretku (po ASCII poretku malih slova).
Sa standardnog ulaza se učitava jedna niska \(S\) (\(1 \leq |S| \leq 10\)) sastavljena samo od cifara.
Na standardni izlaz ispisati sve dobijene kombinacije, svaku u posebnom redu, u rastućem leksikografskom poretku.
23
ad ae af bd be bf cd ce cf
U ovom bloku se opisuje glavno rešenje zadatka.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
static vector<string> mapping =
{
" ",
"",
"abc",
"def",
"ghi",
"jkl",
"mno",
"pqrs",
"tuv",
"wxyz"
};
void gen_msgs(const string digits, const int i, string msg)
{
if (i == digits.size()) {
cout << msg << endl;
return;
}
int num = digits[i] - '0';
if (num == 1) {
gen_msgs(digits, i + 1, msg);
}
for (char c : mapping[num]) {
msg.push_back(c);
gen_msgs(digits, i + 1, msg);
msg.pop_back();
}
}
void gen_msgs(const string digits)
{
string msg;
gen_msgs(digits, 0, msg);
}
int main()
{
string digits; cin >> digits;
gen_msgs(digits);
return 0;
}