Сравнение столбцов матрицы - PullRequest
0 голосов
/ 22 мая 2019

Я должен сравнить столбцы матрицы.

Я пробовал много вариантов, но, насколько я понял, это когда я сравниваю столбцы «рядом друг с другом».

// N rows
// M columns

#include <iostream>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);

    int N, M, ok = 1;
    const int maxn = 1000;
    const int maxm = 1000;
    short H[maxn][maxm];

    cin >> N >> M;

    for (int i=0; i<N; i++){
        for (int j=0; j<M; j++){
            cin >> H[i][j];
        }
    }

    for (int j = 1; j < M; ++j)
    {
        ok = 1;
        for (int i = 0; i < N; ++i)
        {
            if (H[i][j-1] >= H[i][j])
            {
                ok = 0;
            }
        }
        if (ok)
        {
            cout << j+1 << endl;
            return 0;
        }
    }
    cout << -1 << endl;
    return 0;
}

Я должен вернуть индекс первого столбца, где true, что каждый элемент столбца больше, чем ЛЮБОЙ ДРУГОЙ элемент столбца. (Не суммировано.)

Например:

10 10 12 15 10
11 11 11 13 20
12 16 16 16 20

Возвращается с 4, потому что каждый элемент 4-го столбца больше, чем элементы 1-го столбца. Если их нет, он должен вернуться с -1.

1 Ответ

0 голосов
/ 23 мая 2019

Вам нужен еще один внутренний цикл, чтобы пройти через все остальные столбцы:

#include <ios>
#include <iostream>

int main()
{
    using namespace std;
    ios_base::sync_with_stdio(false);

    int N, M, ok = 1;
    const int maxn = 1000;
    const int maxm = 1000;
    short H[maxn][maxm];

    cin >> N >> M;

    for (int i=0; i<N; i++){
        for (int j=0; j<M; j++){
            cin >> H[i][j];
        }
    }

    for (int j = 0; j < M; ++j)
    {
        for (int j2 = 0; j2 < M; ++j2)
        {
            if (j == j2) continue;
            ok = 1;
            for (int i = 0; i < N; ++i)
            {
                if (H[i][j] <= H[i][j2])
                {
                    ok = 0;
                    break;
                }
            }
            if (ok)
            {
                cout << j + 1 << endl;
                return 0;
            }
        }
    }
    cout << -1 << endl;
    return 0;
}

С учетом ввода:

3 5
10 10 10 15 10
11 11 11 13 20
12 16 16 14 20

Это печатает:

4

Посмотреть на Rextester

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...