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 – заданный двумерный массив, индексация в котором начинается с 0. Элемент 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 = [[int(j) for j in input().split()] for i in range(n)]

 

a = b = 0

for i in range(n):

  for j in range(n):

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

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

 

print(a, b)