Задача
Дана целочисленная матрица $ [a_{ij}], ij=1,\ldots,n.$ Получить $b_{1} \dots b_{n},$ где $b_{i}$ — это $\underset{1\leq j\leq n}{\max a_{ij}}\cdot \underset{1\leq j\leq n}{\min a_{ji}}$
Входные данные
Первая строка содержит число $n.$ Следующие строки содержат матрицу $n\times n.$
Выходные данные
Вывести $b_i \; i=1\dots n.$
Тесты
Входные данные | Выходные данные |
2 1 2 4 1 |
2 4 |
3 1 2 3 4 1 -6 1 -2 -1 |
3 -8 -6 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); int n,maxa,mina; n=in.nextInt(); int a[][]; a = new int[n][]; for (int i = 0 ;i < n ; i++) { a[i] = new int [n]; } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ a[i][j]=in.nextInt(); } } int b[]= new int[n]; for(int i=0;i<n;++i){ maxa=a[i][0]; //Присваиваем максимуму значение первого элемента i-й строки. mina=a[0][i]; //Минимуму присваиваем значение первого элемента i-го столбца. for(int j=0;j<n;++j){ maxa=(maxa>a[i][j]?maxa:a[i][j]); //Вычисляем максимум i-й строки. mina=(mina<a[j][i]?mina:a[j][i]); //Минимум i-го столбца. } b[i]=maxa*mina; } for(int i=0;i<n;++i){ System.out.print(b[i]); System.out.print(" "); } } } |
Решение
Очевидно, что из заданной матрицы нужно взять максимальный элемент $i$-й строки и умножить его на минимальный элемент $i$-го столбца. Для нахождения максимума [latex]a_{ij}[/latex], введем переменную и будем присваивать ей начальное значение первого элемента $i$-й строки. Чтобы при расчете максимума проходя по элементам строки мы не сравнивали каждый $i$-й элемент с первым, присваивать начальное значение максимуму будем в цикле по $i$. Аналогично с минимумом, но начальное значение минимума будет равно первому элементу $i$-го столбца.