Дана целочисленная матрица [latex][a_{ij}], ij=1,\ldots,n.[/latex] Получить [latex]b_{1},\ldots,b_{n}[/latex], где [latex]b_{i}[/latex] — это: [latex]\underset{1\leq j\leq n}{\max a_{ij}}\cdot \underset{1\leq j\leq n}{\min a_{ji}}[/latex].
Исходя из задачи ясно, что из данной матрицы надо взять максимальный элемент [latex]i[/latex]-й строки и умножить его на минимальный элемент [latex]i[/latex]-го столбца. Так например, если нам дана матрица 2-го порядка [latex]\begin{Vmatrix}1&2\\4&1\end{Vmatrix}[/latex] то [latex]b_{1}= 2[/latex], [latex]b_{2}= 4[/latex].
Для нахождения максимума [latex]a_{ij}[/latex], введем переменную и будем придавать ей начальное значение 1-го элемента [latex]i[/latex]-й строки. Дабы при расчете максимума проходя по элементам строки мы не сравнивали каждый [latex]i[/latex]-й элемент с 1-м, придавать начальное значение максимуму мы будем в цикле по [latex]i[/latex]. Аналогично с минимумом [latex]a_{ji}[/latex], одно единственное но, начальное значение минимума будет равно первому элементу [latex]i[/latex]-го столбца.
Тесты:
Матрица порядка [latex]n[/latex], где [latex]n[/latex]: | [latex]a[i][j][/latex]: | Результат: | Комментарий: |
2 | [latex]\begin{Vmatrix}1&2\\4&1\end{Vmatrix}[/latex] | 2 4 | Пройден. |
3 | [latex]\begin{Vmatrix}1&2&3\\4&1&-6\\1&-2&-1\end{Vmatrix}[/latex] | 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 |
#include <iostream> using namespace std; int main() { int n,maxa,mina; cin >>n; int a[n][n]; for(int i=0; i<n;++i){ for(int j=0;j<n;++j){ cin >>a[i][j]; } } int b[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){ cout <<b[i]<<" "; } return 0; } |
Зачтено