Skip to main content

41. Подсчёт

Теория

Двумерные массивы в java – это всегда массивы массивов, поэтому они имеют схожую инициализацию и реализацию обращения к элементу по индексу.

Двумерные массивы

int arr[][];

Объявляется переменная точно так же, как и одномерный массив, но при помощи двух пар квадратных скобок.

Инициализировать двумерный массив можно разными способами.

Задать значения массива явно:

int arr[][] ={
{1,6,-2,3},
{1,0,-1,2,3,4},
{-5,0,0}
};

Можно указать только кол-во строк в массиве:

int arr [][] = new int[5][];

После чего выделять память для каждой строки(не последовательность символов, а массив внутри массива) по отдельности:

arr[0] = new int[5];
arr[3] = new int[2];

Если у массива каждая строка имеет одинаковую длину, то такой массив называется прямоугольным.

Если кол-во строк у прямоугольного массива совпадает с кол-вом столбцов, то массив называется квадратным.

Двумерные массивы

У квадратного массива есть две диагонали. Главная диагональ представлена на рисунке слева, побочная справа.

Попробуем инициализировать массив значениями явно, после чего вывести все элементы массива построчно.

Для этого стоит воспользоваться конструкцией for...each, которую мы проходили уже ранее. Т.к. двумерный массив - это массив массивов, то for...each перебирает все строки двумерного массива, поэтому нам нужно реализовать ещё и вложенный for...each.

public class Main {
public static void main(String[] args) {
int arr[][] ={
{1,6,-2,3},
{1,0,-1,2,3,4},
{-5,0,0}
};
for(int[] ar:arr){
for(int a:ar){
System.out.print(a+" ");
}
System.out.println();
}
}
}

На консоль будет выведено:

1 6 -2 3
1 0 -1 2 3 4
-5 0 0

Попробуем решить другую задачу: с клавиатуры вводится два целых числа n и m, требуется создать массив nxm и заполнить его элементами, равными сумме номера строки и номера столбца.

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int arr [][] = new int [n][m];

for (int i=0;i<arr.length;i++){
for (int j=0;j<arr[i].length;j++)
arr[i][j] = i+j;
}
}
}

Обратите внимание, что в первом for мы используем .length, чтобы получить кол-во строк, а во втором, чтобы получить кол-во элементов в конкретной строке.

Задание

Во все заданиях дана целочисленная матрица m

  1. Дано целое число K(0K<N)K (0 \le K \lt N), где NN - количество строк матрицы. Найти сумму элементов KK-й строки матрицы m.
  2. Дано целое число K(0K<M)K (0 \le K \lt M), где MM - количество столбцов матрицы. Найти сумму элементов. Найти сумму элементов KK-го столбца матрицы m.
  3. Для каждой строки матрицы найти сумму ее элементов.
  4. В каждом столбце матрицы найти максимальный элемент.
  5. Для каждого столбца матрицы с четным номером (0, 2, 4, ...)(0,~ 2,~ 4,~ ...) найти сумму его элементов. Условный оператор не использовать.
  6. Найти номер строки матрицы с наибольшей суммой элементов и вывести данный номер.
  7. Найти максимальный среди минимальных элементов каждого из ее столбцов.

Ссылка на контест