Guest User

Untitled

a guest
Jan 20th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.89 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. int func (int h,int length,int &arr[h][length],int height,int check)
  4. {
  5. int otvet=0;
  6. for (int i=0;i<length;i++)
  7. {
  8. if (arr[height][i]==check)
  9. {
  10. otvet=1;
  11. break;
  12. }
  13. }
  14. if (otvet==1 && height==(h-1)) return 1;
  15. if (otvet==1) return func(arr,height+1,check,length,h); else return 0;
  16. }
  17. int main()
  18. {
  19. int y,x;
  20. cin >> y >> x;
  21. int arr[y][x];
  22. for (int i=0;i<y;i++)
  23. {
  24. for (int j=0;j<x;j++)
  25. {
  26. cin >> arr[i][j];
  27. }
  28. }
  29. for (int i=0;i<x;i++)
  30. {
  31. int b,ok;
  32. b=arr[0][i];
  33. ok=func(y,x,arr,i,b);
  34. if (ok==0) continue;
  35. else {
  36. cout << b;
  37. break;
  38. }
  39. if (ok==0) cout << "NO";
  40. }
  41. return 0;
  42. }
  43.  
  44. #include <algorithm>
  45. #include <iostream>
  46. #include <iomanip>
  47.  
  48. int main(int argc, char* argv[])
  49. {
  50. const unsigned N = 20, M = 20;
  51. int arr[N][M];
  52.  
  53. // Подготовка входных данных
  54.  
  55. for (auto &row: arr)
  56. {
  57. for (auto &e : row)
  58. e = std::rand() % 10;
  59. std::sort(std::begin(row), std::end(row));
  60. for (auto e : row)
  61. std::cout << std::setw(2) << e << " ";
  62. std::cout << std::endl;
  63. }
  64.  
  65. // Собственно поиск
  66.  
  67. unsigned i_pos[N] = {}, i_row;
  68. int value;
  69.  
  70. for (; i_pos[0] < M; ++i_pos[0])
  71. {
  72. value = arr[0][i_pos[0]];
  73. // Будем искать это значение в остальных строках матрицы
  74.  
  75. for (i_row = 1; i_row < N; ++i_row)
  76. {
  77. int test_value;
  78.  
  79. for (; i_pos[i_row] < M; ++i_pos[i_row])
  80. if ((test_value = arr[i_row][i_pos[i_row]]) >= value)
  81. break;
  82.  
  83. if (i_pos[i_row] == M || test_value != value)
  84. // В первом случае: значение не найдено - полный провал
  85. // Во втором случае: значение не найдено, но следует попробовать следующее
  86. break;
  87.  
  88. // Значение найдено - переходим к поиску в следующей строке
  89. }
  90.  
  91. if (i_row == N || i_pos[i_row] == M)
  92. // В первом случае: значение найдено - успех
  93. // Во втором случае: значение не найдено - полный провал
  94. break;
  95.  
  96. // Значение не найдено, но следует попробовать следующее
  97. }
  98.  
  99. if (i_pos[0] < M && i_row == N)
  100. std::cout << "Common value: " << value << std::endl;
  101. else
  102. std::cout << "No common value" << std::endl;
  103. }
  104.  
  105. #include <vector>
  106. #include <algorithm>
  107. #include <functional>
  108. #include <iostream>
  109.  
  110. using namespace std;
  111.  
  112. void intersect(vector<int> v, vector<vector<int>> a, size_t& n, vector<int>& r)
  113. {
  114. if (++n >= a.size()) return;
  115.  
  116. sort(v.begin(), v.end(), greater<int>());
  117. sort(a[n].begin(), a[n].end(), greater<int>());
  118.  
  119. vector<int> t(min(v.size(), a[n].size()));
  120.  
  121. vector<int>::iterator i = set_intersection(v.begin(), v.end(), a[n].begin(), a[n].end(), t.begin(), greater <int>());
  122. r.resize(0);
  123. for (vector<int>::iterator j = t.begin(); j != i; j++)
  124. r.push_back(*j);
  125.  
  126. intersect(r, a, n, r);
  127. }
  128.  
  129. int main()
  130. {
  131. vector<vector<int>> a = { { 1,2,3,18},{ 4,3,5,18 },{ 7,8,3 } };
  132. vector<int> r(a[0]);
  133. size_t n = 0;
  134. intersect(a[0], a, n, r);
  135.  
  136. for (vector<int>::iterator j = r.begin(); j != r.end(); j++)
  137. cout << *j << ";";
  138.  
  139. return 0;
  140. }
  141.  
  142. #include <iostream>
  143. using namespace std;
  144. /*
  145. * Функция проверяет есть ли заданный элемент в заданной и последующих строках
  146. * На входе:
  147. * arr - массив сортированных строк из целых чисел
  148. * height - количество строк
  149. * length - длина строк
  150. * s - индекс заданной строки
  151. * elem - искомый элемент
  152. * На выходе:
  153. * true - если элемент присутствует во всех строках начиная с заданной
  154. * false - заданного элемента в следующих строках нет
  155. */
  156. bool func(int** arr, int height, int length, int s, int elem)
  157. {
  158. // ищем элемент в строке:
  159. for (int i=0; i<length; ++i) {
  160. if (elem < arr[s][i])
  161. return false; // дальше все элементы больше, конец рекурсии
  162. else if (elem == arr[s][i]) { // нашли элемент
  163. if ((s+1) == height) // строка последняя, конец рекурсии
  164. return true;
  165. else // а вот тут собственно и рекурсия:
  166. return func(arr, height, length, s+1, elem); // проверяем последующие строки тем же самым образом
  167. }
  168. }
  169. return false; // ничего не нашли, конец рекурсии
  170. }
  171.  
  172. int main()
  173. {
  174. int N,M;
  175. cout << "Lines:";
  176. cin >> N;
  177. if (N<2) return -1; // минимальная проверка размерности не помешает
  178. cout << "Columns:";
  179. cin >> M;
  180. if (M<1) return -1; // минимальная проверка размерности не помешает
  181. int** arr = new int*[N]; // массив строк
  182. for (int i=0; i<N; i++) {
  183. cout << "Line " << i+1 << ':';
  184. arr[i] = new int[M]; // инициализируем строки
  185. for (int j=0; j<M; j++) cin >> arr[i][j]; // заполняем столбцы
  186. // тут бы следовало проверить строку: отсортирована ли она, или принудительно сортировать
  187. }
  188. int i=0;
  189. // ищем элементы первой строки во второй и последующих
  190. while((i<M) && (!func(arr,N,M,1,arr[0][i]))) ++i;
  191. if (i==M) cout << "NO" << endl;
  192. else cout << arr[0][i] << endl;
  193. // подчищаем за собой
  194. for (int i=0; i<N; i++) delete[] arr[i];
  195. delete[] arr;
  196. system("pause");
  197. return 0;
  198. }
Add Comment
Please, Sign In to add comment