4751. Диагонали

 

В квадратной таблице n × n найдите сумму чисел, расположенных на главной и побочной диагоналях.

 

Вход. Первая строка содержит число n (1 ≤ n ≤ 500). Далее задается квадратная матрица n × n, элементы которой – целые числа, не превышающие по модулю 105.

 

Выход. Выведите сумму чисел на главной и на побочной диагоналях матрицы.

 

Пример входа

Пример выхода

4

1 2 3 4

5 6 7 8

3 2 5 4

8 7 9 3

15 21

 

 

РЕШЕНИЕ

массив

 

Анализ алгоритма

Пусть m – заданный двумерный массив с нулевой индексацией. Элемент m[i][j] принадлежит:

·        главной диагонали, если i = j;

·        побочной диагонали, если i + j = n – 1;

 

Пример

Рассмотрим приведенный пример.

Сумма чисел на главной диагонали равна 1 + 6 + 5 + 3 = 15.

Сумма чисел на побочной диагонали равна 8 + 2 + 7 + 4 = 21.

 

Реализация алгоритма

Читаем входные данные. Элементы матрицы обрабатываем на лету, без предварительного создания двумерного массива.

 

scanf("%d",&n);

a = b = 0;

for(i = 0; i < n; i++)

for(j = 0; j < n; j++)

{

  scanf("%d",&val);

 

В переменной a вычисляем сумму элементов главной диагонали.

В переменной b вычисляем сумму элементов побочной диагонали.

 

  if (i == j) a += val;

  if (i + j == n - 1) b += val;

}

 

Выводим ответ.

 

printf("%d %d\n",a,b);

 

Реализация алгоритмадвумерный массив

Объявим двумерный массив.

 

int m[510][510];

 

Читаем входные данные.

 

scanf("%d", &n);

for (i = 0; i < n; i++)

for (j = 0; j < n; j++)

  scanf("%d", &m[i][j]);

 

В переменной a вычисляем сумму элементов главной диагонали.

В переменной b вычисляем сумму элементов побочной диагонали.

 

a = b = 0;

 

Перебираем все элементы двумерного массива.

 

for (i = 0; i < n; i++)

for (j = 0; j < n; j++)

{

 

Элемент m[i][j] лежит на главной диагонали, если i = j;

 

  if (i == j) a += m[i][j];

 

Элемент m[i][j] лежит на побочной диагонали, если i + j = n – 1;

 

  if (i + j == n - 1) b += m[i][j];

}

 

Выводим ответ.

 

printf("%d %d\n", a, b);

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    int m[][] = new int[n][n];

   

    for(int i = 0; i < n; i++)

    for(int j = 0; j < n; j++)

      m[i][j] = con.nextInt();

 

    int a = 0, b = 0;

    for(int i = 0; i < n; i++)

    for(int j = 0; j < n; j++)

    {

      if (i == j) a += m[i][j];

      if (i + j == n - 1) b += m[i][j];

    }

       

    System.out.println(a + " " + b);

    con.close();

  }

}

 

Java реализация – на лету

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

 

    int a = 0, b = 0;

    for(int i = 0; i < n; i++)

    for(int j = 0; j < n; j++)

    {

      int val = con.nextInt();       

      if (i == j) a += val;

      if (i + j == n - 1) b += val;

    }

 

    System.out.println(a + " " + b);

    con.close();

  }

}

 

Python реализация

Читаем входные данные.

 

n = int(input())

m = [list(map(int, input().split())) for _ in range(n)]

 

В переменной a вычисляем сумму элементов главной диагонали.

В переменной b вычисляем сумму элементов побочной диагонали.

 

a = b = 0

 

Перебираем все элементы двумерного массива.

 

for i in range(n):

  for j in range(n):

 

Элемент m[i][j] лежит на главной диагонали, если i = j;

 

    if i == j: a += m[i][j]

 

Элемент m[i][j] лежит на побочной диагонали, если i + j = n – 1;

 

    if i + j == n - 1: b += m[i][j]

 

Выводим ответ.

 

print(a, b)

 

Python реализация – конструирование списков

Читаем входные данные.

 

n = int(input())

m = [list(map(int, input().split())) for _ in range(n)]

 

В переменной a вычисляем сумму элементов главной диагонали.

В переменной b вычисляем сумму элементов побочной диагонали.

 

a = sum(m[i][i] for i in range(n))

b = sum(m[i][n - 1 - i] for i in range(n))

 

Выводим ответ.

 

print(a, b)