Сравнение столбцов матрицы

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

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

// 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;
}

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

Например:

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

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

Почему он не возвращает 1, поскольку столбец с индексом 1 содержит элементы большего размера, чем столбец с индексом 0?

m.raynal 22.05.2019 12:26

Равенство не допускается. Строго "больше".

xentaquadrin 22.05.2019 12:30

Хорошо, я понимаю. А в чем твоя проблема? Ваш код работает? найти ответ ?

m.raynal 22.05.2019 12:38

Он работает, но я получаю 35/100, когда я тестирую его. Я должен сравнить каждый столбец с каждым столбцом. Так что не только j с j+1 , что равно M-1 , но j со всеми остальными столбцами, что равно N*M.

xentaquadrin 22.05.2019 12:48

Должен ли он сравниваться только с предыдущими столбцами или также с последующими столбцами?

jdehesa 23.05.2019 17:53

Предыдущие столбцы и столбцы после.

xentaquadrin 23.05.2019 17:57
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
6
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

#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

Теперь я понимаю. Я подумал о другом внутреннем цикле, но не знал, как его использовать. Спасибо!

xentaquadrin 23.05.2019 19:18

Другие вопросы по теме