Массив: Произвести между матрицами обмен числами так, чтобы max первой матрицы не превышало min второй - QBasic

Формулировка задачи:

Условие Даны две квадратные матрицы А() и В() размером 5×5 Он заполнены случайными числами Требуется произвести между матрицами обмен числами так, чтобы максимальное число первой матрицы не превышало минимального числа второй матрицы. Решение Вариант 1 Можно ввести еще один линейный массив и сбросить на него все элементы обоих матриц. Отсортировать этот массив и просто поделить его элементы между двумя матрицами. Примечание Не подходит из-за сортировки. Сортировки нет в условии. Вариант 2 Надо найти средний элемент. То есть такой, где число элементов больших данного было бы равно числу элементов меньших данного Вопрос. Но как найти такой элемент? Вариант 3 Тотальное сравнение элементов обоих матриц и обмен этими элементами Вопрос. Сколько должно быть сравнений? Где гарантия, что задача будет решена? Задача пока не решена. Ищется подходящий алгоритм Кто может что-нибудь подсказать?

Код к задаче: «Массив: Произвести между матрицами обмен числами так, чтобы max первой матрицы не превышало min второй - QBasic»

textual
DECLARE SUB RAND ()
DECLARE SUB minn (x!(), min!, im!, jm!)
DECLARE SUB maxx (x!(), max!, im!, jm!)
CLS
RAND
DIM SHARED n
 
n = 5
DIM A(n, n)
DIM B(n, n)
 
FOR i = 1 TO n
FOR j = 1 TO n
   A(i, j) = FIX(40 * RND) - 20
   LOCATE i, 5 * j - 2
   PRINT A(i, j);
NEXT j, i
 
FOR i = 1 TO n
FOR j = 1 TO n
   B(i, j) = FIX(40 * RND) - 20
   LOCATE i, 5 * j + 30
   PRINT B(i, j);
NEXT j, i
PRINT : PRINT
 
FOR k = 1 TO n * n
   CALL maxx(A(), max, i1, j1)
   CALL minn(B(), min, i2, j2)
   SWAP A(i1, j1), B(i2, j2)
NEXT
 
FOR i = 1 TO n
FOR j = 1 TO n
   LOCATE i + 6, 5 * j - 2
   PRINT A(i, j);
NEXT j, i
 
FOR i = 1 TO n
FOR j = 1 TO n
   LOCATE i + 6, 5 * j + 30
   PRINT B(i, j);
NEXT j, i
END
 
SUB maxx (x(), max, im, jm)
   max = x(1, 1)
   im = 1
   jm = 1
 
   FOR i = 1 TO n
   FOR j = 1 TO n
      IF max < x(i, j) THEN
         max = x(i, j)
         im = i
         jm = j
      END IF
   NEXT j, i
END SUB
 
SUB minn (x(), min, im, jm)
   mix = x(1, 1)
   im = 1
   jm = 1
 
   FOR i = 1 TO n
   FOR j = 1 TO n
      IF mix > x(i, j) THEN
         mix = x(i, j)
         im = i
         jm = j
      END IF
   NEXT j, i
END SUB
 
SUB RAND
   RANDOMIZE TIMER
END SUB

10   голосов, оценка 3.500 из 5


СОХРАНИТЬ ССЫЛКУ