Advertisement
a53

bucati

a53
Feb 9th, 2020
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.82 KB | None | 0 0
  1. //prof. Marinel Serban
  2. #include <fstream>
  3. #include <cassert>
  4.  
  5. using namespace std;
  6.  
  7. ifstream fin("bucati.in");
  8. ofstream fout("bucati.out");
  9.  
  10. int cerinta, n, cn, p10, nrc, c_nrc;
  11. int vmax, c1, c2, v, vmin, x, d;
  12.  
  13. int main()
  14. {
  15. fin >> cerinta >> n; //citesc datele
  16. assert(cerinta == 1 || cerinta == 2);
  17. assert(999 < n && n < 1000000000);
  18.  
  19. cn = n; //pastrez n
  20. nrc = 0; //contor cifre
  21. p10 = 1; //initializez puterea lui 10
  22. while (cn) //mai am cifre?
  23. { //determin
  24. nrc++; //numarul de cifre
  25. p10 *= 10; //puterea lui 10
  26. cn /= 10; //scap de ultima cifra
  27. }
  28. c_nrc = nrc; //pastrez numarul de cifre
  29. p10 /= 10; //pentru rotire
  30. if (cerinta == 1) //cerinta 1
  31. {
  32. vmax = n / 100; c1 = n / 10 % 10; c2 = n % 10;//initializez
  33. while (nrc) //repet de nrc ori
  34. {
  35. if (n / 100 > vmax) //daca gasesc o valoare mai mare
  36. { //pastrez
  37. vmax = n / 100; c1 = n / 10 % 10; c2 = n % 10;
  38. }
  39. n = n % 10 * p10 + n / 10; //rotesc cifrele
  40. nrc--; //am mai testat o valoare
  41. }
  42. fout << vmax + c1 + c2 << '\n'; //afisez suma maxima
  43. }
  44. else //cerinta 2
  45. {
  46. vmin = 9973; //cel mai mare numar prim in conditiile problemei
  47. while (nrc)
  48. { //incerc prima data cu 2 cifre + cifre
  49. v = n % 100; //ultimele 2 cifre
  50. //if (v > 9) //are 2 cifre dar poate fi chiar 00
  51. {
  52. x = n / 100; //valoarea fara ultimele 2 cifre
  53. while (x) //fac suma dintre v si restul cifrelor
  54. {
  55. v += x % 10;
  56. x /= 10;
  57. }
  58. if (v < vmin) //doar asa are rost sa verific primalitatea
  59. {
  60. d = 2;
  61. while (d * d <= v && v % d != 0) d++;
  62. if (d * d > v)
  63. vmin = v;
  64. }
  65. }
  66. n = n % 10 * p10 + n / 10; //rotesc cifrele
  67. nrc--; //am mai testat o valoare
  68. }
  69. if (vmin == 9973) //NU am gasit cu 2 cifre
  70. {
  71. nrc = c_nrc; //refac numarul de cifre
  72. while (nrc) //incerc cu 3 cifre + restul cifrelor
  73. {
  74. v = n % 1000; //ultimele 3 cifre
  75. //if (v > 99) //are 3 cifre dar poate fi chiar 000
  76. {
  77. x = n / 1000; //valoarea fara ultimele 3 cifre
  78. while (x) //fac suma dintre v si restul cifrelor
  79. {
  80. v += x % 10;
  81. x /= 10;
  82. }
  83. if (v < vmin) //doar asa are rost sa verific primalitatea
  84. {
  85. d = 2;
  86. while (d * d <= v && v % d != 0) d++;
  87. if (d * d > v)
  88. vmin = v;
  89. }
  90. }
  91. n = n % 10 * p10 + n / 10; //rotesc cifrele
  92. nrc--; //am mai testat o valoare
  93. }
  94. fout << vmin << '\n'; //sigur am gasit acum (enunt)
  95. }
  96. else
  97. fout << vmin << '\n'; //am gasit solutie cu 2 cifre
  98. }
  99. return 0;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement