Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <cstring>
- #include <algorithm>
- #define DMAX 101
- using namespace std;
- void citire();
- void prelucrare();
- void gen(int);
- void afisare();
- struct solutie
- {
- char s[DMAX];
- int lg;
- };
- struct solutie msj[DMAX];
- bool criteriu (struct solutie, struct solutie);
- int n, lgsol;
- char cod[DMAX], sol[DMAX];
- bool putere2[DMAX*10];
- int exponent[DMAX*10];
- char litere[DMAX/8];
- int nrmsj;
- int main()
- {
- citire();
- prelucrare();
- gen(0);
- afisare();
- return 0;
- }
- void citire()
- {
- int i;
- ifstream fin ("codif.in");
- fin>>n;
- fin>>cod;
- fin.close();
- return;
- }
- void prelucrare()
- {
- int i, doi;
- for (i=doi=1; i<=10; ++i, doi*=2)
- {
- putere2[doi]=1;
- exponent[doi]=i-1;
- }
- litere[0]=' ';
- litere[1]='a';
- litere[2]='e';
- litere[3]='i';
- litere[4]='o';
- litere[5]='u';
- litere[6]='m';
- litere[7]='n';
- litere[8]='r';
- litere[9]='s';
- return;
- }
- void gen(int k)
- {
- int i, nr, j;
- if (k>n) return;
- if (k==n)//am terminat codul
- {
- ++nrmsj;
- sol[k]=0;
- strcpy (msj[nrmsj].s, sol);
- msj[nrmsj].lg=lgsol;
- return;
- }
- //generez in continuare
- for (i=1; i<=3; ++i)//am 3 variante de a forma un numar
- {
- nr=0;
- for (j=1; j<=i && j+k-1<n; ++j)
- nr=nr*10+cod[k+j-1]-'0';
- if (putere2[nr])//daca numarul curent este o putere a lui 2, atunci poate reprezenta o litera
- {
- sol[lgsol]=litere[exponent[nr]];
- lgsol++;
- gen (k+i);//generez de unde am ramas
- sol[lgsol]=0;
- lgsol--;//restaurez
- }
- }
- return;
- }
- void afisare()
- {
- int i, j;
- ofstream fout ("codif.out");
- sort (msj+1, msj+nrmsj+1, criteriu);
- fout<<nrmsj<<"\n";
- for (i=1; i<=nrmsj; ++i)
- {
- fout<<msj[i].s;
- fout<<"\n";
- }
- fout.close();
- }
- bool criteriu (struct solutie a, struct solutie b)
- {
- return (a.lg<b.lg || (a.lg==b.lg && strcmp(a.s, b.s)<0));
- }
Add Comment
Please, Sign In to add comment