Как найти сумму элементов строго выше вторичной диагонали матрицы, используя вектор ? - PullRequest
1 голос
/ 18 апреля 2020

если ввод:

4 
1 6 3 1
6 1 3 1
1 3 1 6
3 1 6 1

мой вывод должен быть:

18 

1 + 6 + 3 + 6 + 1 + 1 = 18

вторая диагональ - это та, которая начинается сверху справа и внизу слева

       1
     3
   3
 3

Мне нужно найти сумму элементов, которые находятся строго над второй диагональю.

Это мой код пока:

int n , sum = 0;
cin >> n;

vector<vector<int>> A(n);

for (auto rows : A)
   for (auto elements : rows)
       cin >> elements;

for(auto x : A) 
   sum += A[x] [n - x];

cout << sum;

Я новичок в векторе на матрице. Кроме того, если вы, ребята, знаете, где я могу улучшить свои векторные навыки и лучше понять stl vector, ваш совет будет очень полезен!

Если бы вы могли мне помочь, я был бы очень признателен!

Спасибо всем за ответы!

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Для начала вектор должен быть определен как

vector<vector<int>> A(n, std::vector<int>( n ) );

Эти циклы должны использовать ссылки на объекты

for (auto &rows : A)
   for (auto &elements : rows)
       cin >> elements;

Чтобы найти сумму, вы можете использовать индексную переменную, как, например,

long long int sum = 0;

for ( auto n = A.size(); n-- != 0;  )
{
    for ( std::vector<int>::size_type i = 0; i < n; i++ )
    {
        sum += A[A.size() - n - 1][i];
    }
}

Вот демонстрационная программа

#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>

int main() 
{
    size_t n = 0;

    std::cout << "Enter the size of a matrix: ";

    std::cin >> n;

    std::vector<std::vector<int>> v( n, std::vector<int>( n ) );

    std::srand( ( unsigned int )std::time( nullptr ) );

    for ( auto &row : v )
    {
        for ( auto &item : row ) item = std::rand() % n;
    }

    for ( const auto &row : v )
    {
        for ( const auto &item : row ) std::cout << item << ' ';
        std::cout << '\n';
    }

    long long int sum = 0;

    for ( auto n = v.size(); n-- != 0; )
    {
        for ( std::vector<int>::size_type i = 0; i < n; i++ )
        {
            sum += v[v.size() - n - 1][i];
        }
    }

    std::cout << "\nThe sum is equal to " << sum << '\n';

    return 0;
}

Вывод может выглядеть как

Enter the size of a matrix: 5
4 4 0 2 0 
1 4 4 3 3 
3 3 1 0 4 
2 0 2 3 2 
2 1 3 0 3 

The sum is equal to 27
0 голосов
/ 18 апреля 2020

Использовать индексы:

...
for (int i = 0; i < A.size(); i++)
   for (int j = 0; j < A[i].size() - i; j++)
       sum += A[i][j];
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...