не могу найти ошибку c++

тз: В двумерном динамическом массиве определить наиболее часто встречающийся элемент. Если таковых несколько, то в качестве ответа принять элемент с наибольшей суммой индексов

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

быстрый экскурс по коду: я перевожу двумерный массив в одномерный и уже в нем все сортирую

#include <iomanip>

using namespace std;

int main()
{
    int n, nSquare = 0, kj = 0, counter = 1, newcounter = 1, searchValue = 0, sumIndex = 0, auxiliarySumIndex = 1, value = 0;

    setlocale(LC_ALL, "");

    cout << "Введите N: ";
    cin >> n;
    cout << "\n" << "Двумерный массив: \n" << endl;

    nSquare = n * n;

    int** arr = new int* [n];
    int* arr2 = new int[nSquare];

    srand(time(0));

    for (int i = 0; i < n; i++) { // наполняем двумерный массив
        arr[i] = new int[n];
        for (int j = 0; j < n; j++) {
            arr[i][j] = -3 + rand() % 10;
            cout << setw(4) << arr[i][j];
        }
        cout << endl;
    }

    for (int i = 0; i < n; i++) { // делаем из двумерного массива одномерный
        for (int j = 0; j < n; j++, kj++) {
            arr2[kj] = arr[i][j];
        }
    }

    for (int k2 = 0; k2 < nSquare; k2++) { // меняем значения местами по возрастанию
        for (int i = 0; i < nSquare - 1; i++) {
            if (arr2[i] > arr2[i + 1]) {
                int swap = arr2[i];
                arr2[i] = arr2[i + 1];
                arr2[i + 1] = swap;
            }
        }
    }

    cout << "\n" << "\n" << "Упорядоченный одномерный массив: \n" << endl;

    for (int i = 0; i < nSquare; i++) {
        cout << arr2[i] << " ";
    }

    cout << "\n" << endl;

    for (int i = 0; i < nSquare; i++) { //ищем большее количесво повторений
        if (arr2[i] == arr2[i + 1]) {
            counter++;
        }
        else {
            if (newcounter <= counter) {
                newcounter = counter;
            }
            counter = 1;
        }
    }

    counter = 1;

    cout << "\n" << "Найденные значения с наибольшим количеством повторений в формате 'количество повторений -> значение': \n" << endl;

    for (int i = 0; i < nSquare; i++) { // ищем числа, с большим количесвом повторений
        if (arr2[i] == arr2[i + 1]) {
            counter++;
        }
        else {
            if (newcounter <= counter) {
                if (counter > 1) cout << counter << " -> " << arr2[i - 1] << endl;
                searchValue = arr2[i - 1];
                for (int si = 0; si < n; si++) { // сравниваем и находим суммы индексов
                    for (int sj = 0; sj < n; sj++) {
                        if (arr[si][sj] == searchValue) {
                            auxiliarySumIndex = auxiliarySumIndex + si + sj;
                        }
                    }
                }
                if (auxiliarySumIndex > sumIndex) {
                    sumIndex = auxiliarySumIndex;
                    value = arr2[i - 1];
                }
            }
            counter = 1;
        }
    }

    cout << "\n" << "\n" << "Число с наибольшим количеством повторений: " << value << "\n" << endl;

    system("pause");
}```

Ответы (1 шт):

Автор решения: MBo

Один из способов - заведите одномерный массив структур {значение; сумма индексов}

arr2[kj].value = arr[i][j];
arr2[kj].sum = i + j;

Далее понятно, что делать?

→ Ссылка