Массив: Произвести между матрицами обмен числами так, чтобы max первой матрицы не превышало min второй - QBasic
Формулировка задачи:
Условие
Даны две квадратные матрицы А() и В() размером 5×5
Он заполнены случайными числами
Требуется произвести между матрицами обмен числами
так, чтобы максимальное число первой матрицы не превышало
минимального числа второй матрицы.
Решение
Вариант 1
Можно ввести еще один линейный массив и сбросить на него все
элементы обоих матриц. Отсортировать этот массив и просто
поделить его элементы между двумя матрицами.
Примечание
Не подходит из-за сортировки. Сортировки нет в условии.
Вариант 2
Надо найти средний элемент. То есть такой, где число элементов
больших данного было бы равно числу элементов меньших данного
Вопрос.
Но как найти такой элемент?
Вариант 3
Тотальное сравнение элементов обоих матриц и обмен этими элементами
Вопрос.
Сколько должно быть сравнений? Где гарантия, что задача будет решена?
Задача пока не решена.
Ищется подходящий алгоритм
Кто может что-нибудь подсказать?
Решение задачи: «Массив: Произвести между матрицами обмен числами так, чтобы max первой матрицы не превышало min второй»
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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д