Advertisement
a53

virgule

a53
Oct 3rd, 2018
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.69 KB | None | 0 0
  1. #include <fstream>
  2. #include <cstring>
  3. #define LGMAX 100
  4. using namespace std;
  5.  
  6. ifstream fin("virgule.in");
  7. ofstream fout("virgule.out");
  8. char s[LGMAX];
  9. int sol[LGMAX], solmin[LGMAX];
  10. int nrmin, lg;
  11.  
  12. void afisare();
  13. void bkt(int k);
  14. void copiaza(int k);
  15. int Compar(int inc1, int sf1, int inc2, int sf2);
  16.  
  17. int main()
  18. {int i;
  19. fin>>(s+1);
  20. lg=strlen(s+1);
  21. for (i=lg-1; i>=1; i--)
  22. {
  23. sol[1]=i;
  24. bkt(2);
  25. }
  26. afisare();
  27. return 0;
  28. }
  29.  
  30. void bkt(int k)
  31. {int rez, i;
  32. rez=Compar(sol[k-1]+1,lg, sol[k-2]+1,sol[k-1]);
  33. if (rez<=0) return ;
  34. rez=Compar(solmin[nrmin]+1, lg, sol[k-1]+1, lg);
  35. if (rez>0) copiaza(k);
  36. else
  37. if (rez==0)
  38. {
  39. i=1;
  40. while (i<k-1 && sol[i]==solmin[i]) i++;
  41. if (Compar(sol[i-1]+1, sol[i], solmin[i-1]+1, solmin[i])>0) copiaza(k);
  42. }
  43. //incerc sa mai pun o virgula dupa cifra de pe pozitia i
  44. for (i=lg-1; i>sol[k-1]; i--)
  45. {
  46. rez=Compar(sol[k-2]+1, sol[k-1], sol[k-1]+1,i);
  47. if (rez>=0) break;
  48. sol[k]=i;
  49. bkt(k+1);
  50. }
  51. }
  52.  
  53. void afisare()
  54. {int i, k;
  55. k=1;
  56. for (i=1; i<=lg; i++)
  57. {fout<<s[i];
  58. if (i==solmin[k]) {fout<<','; k++;}
  59. }
  60. fout<<'\n';
  61. }
  62.  
  63. void copiaza(int k)
  64. { int i;
  65. nrmin=k-1;
  66. for (i=1; i<k; i++) solmin[i]=sol[i];
  67. }
  68.  
  69. int Compar(int inc1, int sf1, int inc2, int sf2)
  70. {int i, j;
  71. while (inc1<sf1 && s[inc1]=='0') inc1++;
  72. while (inc2<sf2 && s[inc2]=='0') inc2++;
  73. if (sf1-inc1+1>sf2-inc2+1) return 1;
  74. if (sf1-inc1+1<sf2-inc2+1) return -1;
  75. //au aceeasi lungime
  76. for (i=inc1, j=inc2; i<=sf1 && s[i]==s[j]; i++, j++);
  77. if (i>sf1) return 0;
  78. if (s[i]<s[j]) return -1;
  79. return 1;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement