a53

Codif

a53
May 18th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  1. #include <fstream>
  2. #include <cstring>
  3. #include <algorithm>
  4. #define DMAX 101
  5. using namespace std;
  6.  
  7. void citire();
  8. void prelucrare();
  9. void gen(int);
  10. void afisare();
  11.  
  12. struct solutie
  13. {
  14. char s[DMAX];
  15. int lg;
  16. };
  17. struct solutie msj[DMAX];
  18. bool criteriu (struct solutie, struct solutie);
  19.  
  20. int n, lgsol;
  21. char cod[DMAX], sol[DMAX];
  22. bool putere2[DMAX*10];
  23. int exponent[DMAX*10];
  24. char litere[DMAX/8];
  25. int nrmsj;
  26.  
  27. int main()
  28. {
  29. citire();
  30. prelucrare();
  31. gen(0);
  32. afisare();
  33. return 0;
  34. }
  35.  
  36. void citire()
  37. {
  38. int i;
  39. ifstream fin ("codif.in");
  40. fin>>n;
  41. fin>>cod;
  42. fin.close();
  43. return;
  44. }
  45.  
  46. void prelucrare()
  47. {
  48. int i, doi;
  49. for (i=doi=1; i<=10; ++i, doi*=2)
  50. {
  51. putere2[doi]=1;
  52. exponent[doi]=i-1;
  53. }
  54. litere[0]=' ';
  55. litere[1]='a';
  56. litere[2]='e';
  57. litere[3]='i';
  58. litere[4]='o';
  59. litere[5]='u';
  60. litere[6]='m';
  61. litere[7]='n';
  62. litere[8]='r';
  63. litere[9]='s';
  64. return;
  65. }
  66.  
  67. void gen(int k)
  68. {
  69. int i, nr, j;
  70. if (k>n) return;
  71. if (k==n)//am terminat codul
  72. {
  73. ++nrmsj;
  74. sol[k]=0;
  75. strcpy (msj[nrmsj].s, sol);
  76. msj[nrmsj].lg=lgsol;
  77. return;
  78. }
  79.  
  80. //generez in continuare
  81. for (i=1; i<=3; ++i)//am 3 variante de a forma un numar
  82. {
  83. nr=0;
  84. for (j=1; j<=i && j+k-1<n; ++j)
  85. nr=nr*10+cod[k+j-1]-'0';
  86.  
  87. if (putere2[nr])//daca numarul curent este o putere a lui 2, atunci poate reprezenta o litera
  88. {
  89. sol[lgsol]=litere[exponent[nr]];
  90. lgsol++;
  91. gen (k+i);//generez de unde am ramas
  92. sol[lgsol]=0;
  93. lgsol--;//restaurez
  94. }
  95. }
  96. return;
  97. }
  98.  
  99. void afisare()
  100. {
  101. int i, j;
  102. ofstream fout ("codif.out");
  103. sort (msj+1, msj+nrmsj+1, criteriu);
  104. fout<<nrmsj<<"\n";
  105. for (i=1; i<=nrmsj; ++i)
  106. {
  107. fout<<msj[i].s;
  108. fout<<"\n";
  109. }
  110. fout.close();
  111. }
  112.  
  113. bool criteriu (struct solutie a, struct solutie b)
  114. {
  115. return (a.lg<b.lg || (a.lg==b.lg && strcmp(a.s, b.s)<0));
  116. }
Add Comment
Please, Sign In to add comment