Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.97 KB | None | 0 0
  1. #include <iostream>
  2. #include <random>
  3. #include <time.h>
  4. // Условие б) Паліндромом вважається будь-який набір символів,
  5. симетричний відносно своєї середини.
  6. Рядок задається користувачем з клавіатури або програмно (якщо
  7. користувач ввів порожній рядок).
  8. Даний рядок перетворити на паліндром двома способами,
  9. дозволивши користувачу вибрати один з них: – довжина утвореного рядка, який є паліндромом, повинна бути
  10. мінімальною; – вивести на екран всі паліндроми, які можна утворити з даного
  11. рядка.
  12. Вибір режиму реалізувати у вигляді меню, передбачивши
  13. повторення дій необхідну кількість разів. Серед режимів роботи
  14. програми передбачити перевірку введеного рядка на те, чи є він
  15. паліндромом, та вихід з програми.
  16. using namespace std;
  17.  
  18. int palindromTest(string str, int mid, int len, int plus = 0) {
  19. for (int i = mid + plus; i < len; i++) {
  20. int left = mid - abs(mid - i - 1 + plus);
  21. if (left == 0 && str[i] == str[left]) {
  22. return i;
  23. }
  24. if (i == len - 1 && str[i] == str[left]) {
  25. return left;
  26. }
  27.  
  28. if (str[i] != str[left]) {
  29. return 0;
  30. }
  31. }
  32. return -1;
  33. }
  34.  
  35. string fullPal(string str, int mid, int shift) {
  36. int len = str.length();
  37. string new_str;
  38. if ((mid == shift && shift == 0) || shift > mid) {
  39. new_str = "";
  40. for (int i = len - 1; i > shift; i--) {
  41. new_str += str[i];
  42. }
  43. new_str += str;
  44. }
  45. if ((mid == shift && shift == len - 1) || shift < mid) {
  46. new_str = str;
  47. for (int i = shift - 1; i >= 0; i--) {
  48. new_str += str[i];
  49. }
  50. }
  51. return new_str;
  52. }
  53.  
  54. bool existEl(string arr[], string str, int size) {
  55. for (int i = 0; i < size; i++) {
  56. if (arr[i] == str)
  57. return true;
  58. }
  59. return false;
  60. }
  61.  
  62. int main() {
  63. string str;
  64. char str1[255] = "";
  65. string alph = "abcdefghijklmnopqrstuvwxyz";
  66. cout << "Write line:" << endl;
  67. cin.getline(str1, 255);
  68.  
  69. str = str1;
  70. // str = "1234";
  71. srand(time(NULL));
  72. if (str == " ") {
  73. str = "";
  74. int ran = rand() % 15 + 1;
  75. for (int i = 0; i < ran; i++) {
  76. int alpha = rand() % 25;
  77. str += alph[alpha];
  78. }
  79. }
  80. int len = str.length();
  81. int ans;
  82. cout << "Write 1 for first method, 2 for second method, 3 to check palindrom or 1 to exit" << endl;
  83. int min = 100000;
  84. string arr[len + 2];
  85. int iter = 0;
  86. if (len <= 2) {
  87. if (str[0] == str[1] || len == 1) {
  88. arr[0] = str;
  89. iter++;
  90. min = 2;
  91. } else {
  92. arr[0] = str + str[0];
  93. arr[1] = str[1] + str;
  94. iter += 2;
  95. min = 3;
  96. }
  97. } else {
  98. min = 100000;
  99. for (int i = 1; i < len - 1; i++) {
  100.  
  101. int a = palindromTest(str, i, len);
  102. int b = palindromTest(str, i, len, 1);
  103. if (a != 0) {
  104. // cout << str << ' ' << i << ' ' << a << endl;
  105. arr[iter] = fullPal(str, i, a);
  106. if (arr[iter].length() < min)
  107. min = arr[iter].length();
  108. iter++;
  109. }
  110. if (b != 0) {
  111. // cout << str << ' ' << i << ' ' << b << endl;
  112. arr[iter] = fullPal(str, i, b);
  113. if (arr[iter].length() < min)
  114. min = arr[iter].length();
  115. iter++;
  116. }
  117.  
  118. }
  119. if (!existEl(arr, str, iter)) {
  120. arr[iter++] = fullPal(str, 0, 0);
  121. arr[iter++] = fullPal(str, len - 1, len - 1);
  122. }
  123. while (true) {
  124. cin >> ans;
  125. if (ans == 1) {
  126. for (int i = 0; i < iter; i++) {
  127. if (arr[i].length() == min)
  128. cout << arr[i] << endl;
  129. }
  130. }
  131. if (ans == 2) {
  132. for (int i = 0; i < iter; i++) {
  133. cout << arr[i] << endl;
  134. }
  135. }
  136. if (ans == 3) {
  137. if (existEl(arr, str, iter))
  138. cout << "It's a palindrome" << endl;
  139. else {
  140. cout << "It's not a palindrome" << endl;
  141. }
  142.  
  143. }
  144. if (ans == 4)
  145. break;
  146. }
  147. }
  148.  
  149. for (int i = 0; i < iter; i++) {
  150. cout << arr[i] << ' ';
  151. }
  152.  
  153. return 0;
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement