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
: abc
3
: def
4
: ghi
5
: jkl
6
: mno
7
: pqrs
8
: tuv
9
: wxyz
Potrebno 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()) {
<< msg << endl;
cout return;
}
int num = digits[i] - '0';
if (num == 1) {
(digits, i + 1, msg);
gen_msgs}
for (char c : mapping[num]) {
.push_back(c);
msg(digits, i + 1, msg);
gen_msgs.pop_back();
msg}
}
void gen_msgs(const string digits)
{
;
string msg(digits, 0, msg);
gen_msgs}
int main()
{
; cin >> digits;
string digits
(digits);
gen_msgs
return 0;
}